用透明颜色填充密度曲线

8

我有一个数据框,想要根据其中两列进行叠加密度图。我希望颜色是透明的。我使用了填充选项,并将填充分配给因子列。当您有一个因子列时,默认情况下所有填充都会是透明的。

但在像这样没有因子的情况下,我们如何用透明填充呢?

library("ggplot2")
vec1 <- data.frame(x=rnorm(2000, 0, 1))
vec2 <- data.frame(x=rnorm(3000, 1, 1.5))

ggplot() + geom_density(aes(x=x), fill="red", data=vec1) + 
  geom_density(aes(x=x), fill="blue", data=vec2)

我尝试添加geom_density(alpha=0.4),但效果不佳。 enter image description here

2
在调用 geom_density(...) 时,将 alpha=.4 放入其中。 - jlhoward
1个回答

15

像这样?

ggplot() + geom_density(aes(x=x), fill="red", data=vec1, alpha=.5) + 
  geom_density(aes(x=x), fill="blue", data=vec2, alpha=.5)

编辑 回复楼主的评论。

这是使用 ggplot 绘制多条曲线的惯用方式。

gg <- rbind(vec1,vec2)
gg$group <- factor(rep(1:2,c(2000,3000)))
ggplot(gg, aes(x=x, fill=group)) + 
  geom_density(alpha=.5)+
  scale_fill_manual(values=c("red","blue"))

因此,我们首先将两个数据集绑在一起,然后添加一个分组变量。接下来告诉 ggplot 哪个是分组变量,它会处理其他所有事情。


有没有一个好方法来标记这些密度图?我计划将两个以上的图形叠加在一起。 - add-semi-colons
这里唯一的问题是我要绘制的数据在同一行中,例如上面的密度图来自001、200、100,-- 200和100是密度函数所在的列,这种情况下分配组很困难。 - add-semi-colons
1
是的,但你的例子不是这样的。请阅读reshape2包中melt(...)的文档。这是从“宽”格式 - 不同列中的组,转换为“长”格式 - 所有数据在一列中,并通过第二列区分组的方法。 - jlhoward
你能否修改代码,只将透明度应用于前景密度?我正在尝试复制这篇论文中的图4(第27页)。 - riccardo-df

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接