gpt4 book ai didi

r - ggplot2:在同一图中绘制不同的密度

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

我还有另一个关于 ggplot2 的问题……但这次我什至不确定我想要做什么……让我们从一个简单的例子开始;这是我到目前为止:

library(reshape2)
library(ggplot2)

a.df <- data.frame(
id=c('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y'),
var1=c(25,35,46,19,35,68,78,23,65,78,98,32,65,74,24,56,78,12,34,76,87,12,54,87,34),
group1=c(1,2,'NONE','NONE',1,2,2,1,3,4,3,'NONE','NONE',4,4,3,1,1,2,3,4,'NONE','NONE',2,3),
group2=c(1,'NONE',1,1,2,2,'NONE',2,'NONE',2,3,4,3,4,1,'NONE',1,3,4,'NONE',4,4,3,'NONE',2)
)

ggplot(data=subset(a.df,group1!='NONE'), aes(x=var1)) +
geom_density() +
facet_grid(. ~ group1)
ggplot(data=subset(a.df,group1=='NONE'), aes(x=var1)) +
geom_density()

ggplot(data=subset(a.df,group2!='NONE'), aes(x=var1)) +
geom_density() +
facet_grid(. ~ group2)
ggplot(data=subset(a.df,group2=='NONE'), aes(x=var1)) +
geom_density()

所以我想在这里做的是:

1-首先,只需将面划分为 2x2,而不是 4x1(我曾尝试使用 ncol=2,但没有奏效)

2-绘制第二个图(子集(a.df,group1=='NONE'))以及第一个图的4个方面中的每一个。对第 3 和第 4 次执行相同的操作。

3-如果可能,最好将 2 个结果图(4 个方面的第 1+2 个,以及 4 个方面的第 3+4 个)合二为一,但我在这里看到的问题是这些方面取决于2个分组变量......有可能吗??

总而言之,我觉得输入 data.frame 需要一些改造,但我不知道如何...非常感谢!

最佳答案

在此 post here 之后,向每个面添加单个密度曲线相当简单。 .我认为这就是你想要做的,但我可能是错的。请注意 facet_wrap允许您选择列数,而不是 facet_grid .

ggplot(data=subset(a.df,group1!='NONE'), aes(x=var1)) + 
geom_density() +
facet_wrap( ~ group1, ncol = 2) +
geom_density(data=subset(a.df,group1=='NONE', var1), aes(var1, color = "NONE")) +
scale_color_manual(name = "Baseline", values = "blue")

在将数据集融合为长格式后,对两个组做同样的事情似乎相当简单,但它只适用于 facet_grid因此无法控制列数。
require(reshape2)
dat2 = melt(a.df, measure.vars = c("group1", "group2"), variable.name = "group")

ggplot(data=subset(dat2, value != "NONE"), aes(x=var1)) +
geom_density() + facet_grid(group ~ value) +
geom_density(data=subset(dat2,value=='NONE', c(var1, group)), aes(var1), color = "blue")

我不得不使用更多的“蛮力”方法来使这个与 facet_wrap 一起工作。本质上,我必须创建一种值为 var1 的虚拟数据集。来自 NONE每个组的 1-4 级重复类别。查看 datnone 的输出为了更好的解释。希望其他人会有更好的方法来解决这个问题,因为这可能会完成工作,但肯定不是很好。
datnone = cbind(dat2[dat2$value == "NONE", 2:3], 
value = rep(1:4, each = nrow(dat2[dat2$value == "NONE",])) )

ggplot(data=subset(dat2, value != "NONE"), aes(x=var1)) +
geom_density() + facet_wrap(group ~ value, ncol = 2) +
geom_density(data = datnone, aes(var1), color = "blue")

编辑以添加两行、两种颜色的图例

这是添加图例和控制两者的一种方法 linetypecolor .您还可以控制图例的名称和标签,以使其更好。
ggplot(data=subset(a.df,group1!='NONE'), aes(x=var1, color = "GROUP", linetype = "GROUP")) + 
geom_density() +
facet_wrap( ~ group1, ncol = 2) +
geom_density(data=subset(a.df,group1=='NONE', var1),
aes(var1, color = "NONE", linetype = "NONE")) +
scale_linetype_manual(values = c("solid", "dotted") ) +
scale_color_manual(values = c("black", "red") )

关于r - ggplot2:在同一图中绘制不同的密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19190743/

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