gpt4 book ai didi

r - 带有 geom_tile 的情节中的多个图例

转载 作者:行者123 更新时间:2023-12-04 11:15:53 25 4
gpt4 key购买 nike

我有两个不同的数据框:P1 和 P2。这些数据帧中的每一个都有 3 个不同的列:N1、N2 和一个值 (mean_RMSE)。 N1和N2在15到120之间,对于一条线,N2总是低于N1。

如果我绘制 P1,这就是我得到的:

p <- ggplot()
p <- (p
+ geom_tile(data=P1, aes(x=as.numeric(N1), y=as.numeric(N2), fill=mean_RMSE))
)

P1

但我的目标是在同一个地 block 上绘制 P1 和 P2:

p <- ggplot()
p <- (p
+ geom_tile(data=P1, aes(x=as.numeric(N1), y=as.numeric(N2), fill=mean_RMSE))
+ geom_tile(data=P2, aes(x=as.numeric(N2), y=as.numeric(N1), fill=mean_RMSE))
)

P1_P2

我不知道如何更改 P2 的颜色。例如,我想要 P1 的蓝色范围和 P2 的红色范围,以便轻松区分 P1 和 P2。

scale_fill_gradient 改变了 P1 和 P2 的颜色(我仍然无法区分它们),如果我在 geom_tile 中添加“颜色”,我只是有两个不同的轮廓:

p <- ggplot()
p <- (p
+ geom_tile(data=psSST_T[[1]], aes(x=as.numeric(N1), y=as.numeric(N2), fill=mean_RMSE, colour="red"))
+ geom_tile(data=psT_SST[[1]], aes(x=as.numeric(N2), y=as.numeric(N1), fill=mean_RMSE, colour="blue")))

contour

事实上,我想要 P1 和 P2 的两个不同图例。

有人可以帮助我吗?

最佳答案

我假设您想对 P1 和 P2 数据框使用不同的配色方案。您可以通过将 fill=factor(data_frame)alpha=mean_RMSE 相结合来实现这一点。然后您可以使用 gridExtra 和 gtable 包添加 2 个图例。

# making up data
P1 <- data.frame(N1=as.integer(runif(100, 0, 12))*10,
N2=as.integer(runif(100, 0, 12))*10,
mean_RMSE=rnorm(100, 0, 1),
data_frame=rep("P1", 100))
P2 <- data.frame(N1=as.integer(runif(100, 0, 12))*10,
N2=as.integer(runif(100, 0, 12))*10,
mean_RMSE=rnorm(100, 0, 1),
data_frame=rep("P2", 100))
d <- rbind(P1, P2)

library(ggplot2)
library(gridExtra)
library(gtable)

(g_main <- ggplot(d, aes(N1, N2, fill=data_frame, alpha=mean_RMSE)) + geom_tile() +
scale_fill_manual("", values = c("#CC0000", "#0000FF"), drop = FALSE))

## create dummy plots to create legends of 2 different color schemes

(g_dummy1 <- ggplot(subset(d, data_frame=="P1"), aes(N1, N2, fill=mean_RMSE)) + geom_tile() +
scale_fill_gradientn(name = "Mean RMSE \n(P1)", colours=c("#CC0000", "white")))
(g_dummy2 <- ggplot(subset(d, data_frame=="P2"), aes(N1, N2, fill=mean_RMSE)) + geom_tile() +
scale_fill_gradientn(name = "Mean RMSE \n(P2)", colours=c("#0000FF", "white")))

这是一个找到的函数 in this post创建图例 grob。

g_legend<-function(a.gplot){
tmp <- ggplot_gtable(ggplot_build(a.gplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
legend
}

现在使用此函数创建 2 个具有不同配色方案的图例 grob,然后使用 grid.arrange 将所有内容放在一起:

legend1 <- g_legend(g_dummy1)
legend2 <- g_legend(g_dummy2)
grid.arrange(g_main+theme(legend.position = 'none'), legend1, legend2,
ncol=3, widths=c(4/6, 1/6, 1/6))

enter image description here

关于r - 带有 geom_tile 的情节中的多个图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24822621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com