我从另一个程序的复杂分析中获取数据,我想用R绘制。我有一个X变量和多个Y变量以及预测的置信限。我希望用Y和X的格式在R中用阴影置信区间绘制它们。我知道我可以将ggplot子集化为仅显示主要效果 - 我也知道如何ggplot阴影区域 - 但我无法弄清楚如何在同一数据帧中同时进行这两种操作。
示例代码:
ggplot(demo.melt, aes(x=X, y=value, group=var, col=var)) + geom_line()
现在我可以将它们全部绘制成这样的行:
demo.sub <- demo.melt[demo.melt$var %in% c("Y1", "Y2"),]
ggplot(demo.sub, aes(x=X, y=value, group=var, col=var)) + geom_line()
......但那不是我想要的。或者,我可以仅将主要响应变量子集化:
select * from tblData where details not like '%## ??/??/???? ##%'
...但是然后CI数据不在对象中,我不能/不知道如何使用geom_ribbon()来绘制它。所以我的问题是如何绘制我的Y1&amp; Y2为线,lci&amp; uci数据作为阴影区域的边界同时/来自同一个对象??
答案 0 :(得分:2)
当第一个数据集中的所有内容都作为列时,为什么要融化数据?只是尝试稍微修改ggplot代码:
ggplot(demo, aes(x=X)) +
geom_line(aes(y=Y1), color="red") +
geom_line(aes(y=Y2), col="blue") +
geom_ribbon(aes(ymin=Y1_lci, ymax=Y1_uci), color="red", alpha=0.2)+
geom_ribbon(aes(ymin=Y2_lci, ymax=Y2_uci), color="blue", alpha=0.2)
如果你做了3列以上的话,这可能看起来很难看。 因此,您可能更喜欢这个版本并排绘制:
library(gridExtra)
plot1=
ggplot(demo, aes(x=X)) +
geom_line(aes(y=Y1), color="red") +
geom_ribbon(aes(ymin=Y1_lci, ymax=Y1_uci), alpha=0.2)
plot2=
ggplot(demo, aes(x=X)) +
geom_line(aes(y=Y2), col="blue") +
geom_ribbon(aes(ymin=Y2_lci, ymax=Y2_uci), alpha=0.2)
grid.arrange(plot1, plot2, ncol=2)
另外,如果ncol
看起来更好,请将nrow
更改为grid.arrange
。
如果您想要包含一个图例(在这种情况下,它是&#34;手动&#34;在使用其他数据格式时创建它更容易)。
ggplot(demo, aes(x=X)) +
geom_line(aes(y=Y1, color="Y1")) +
geom_line(aes(y=Y2, color="Y2")) +
labs(title="TITLE", x="X_name", y="Y_name", col="Y")+
scale_colour_manual(values=c("red","blue"))+
geom_ribbon(aes(ymin=Y1_lci, ymax=Y1_uci), col="red", alpha=0.2)+
geom_ribbon(aes(ymin=Y2_lci, ymax=Y2_uci), col="blue", alpha=0.2)
创造传奇可能有更好的方法,但我一直在使用它。
使用线型:
ggplot(demo, aes(x=X)) +
geom_line(aes(y=Y1, linetype="Y1")) +
geom_line(aes(y=Y2, linetype="Y2")) +
labs(title="TITLE", x="X_name", y="Y_name", linetype="Y")
答案 1 :(得分:1)
您可以使用melt
/ reshape
执行此操作,如果您想轻松生成图例,这非常有用。使用varying
的{{1}}参数将相关变量组合在一起。
reshape
然后绘制
demo_m <- reshape(demo, idvar=c("ID","X"),
varying=list(c(3,6), c(4,7), c(5,8)),
direction="long",
v.names=c("Y", "lci", "uci"))
这也允许你进行分面
ggplot(demo_m, aes(X, Y, ymin=lci, ymax=uci, col=factor(time))) +
geom_line() +
geom_ribbon(alpha=0.2)