ggplot2:叠加密度图R

时间:2014-02-04 21:29:23

标签: r plot ggplot2

我想在R中叠加几个密度图并知道有几种方法可以做到这一点,但是由于某种原因它们不适合我('sm'库不安装而且我' m noob足以不理解大部分代码)。我也尝试过plot和par,但是我想使用qplot,因为它有更多的配置选项。

我有以这种形式保存的数据

library(ggplot2)
x <- read.csv("clipboard", sep="\t", header=FALSE)
x
     V1     V2    V3
1    34     23    24
2    32     12    32

我想创建3个重叠的图,其中V1,V2和V3的值使用灰色或灰色调来填充或使用点线或与图例类似的东西。你能帮助我吗?

谢谢!

3 个答案:

答案 0 :(得分:45)

通常对于ggplot和多个变量,您需要从宽转换为长格式。我认为可以不用,但这就是包的工作方式

这是解决方案,我生成了一些数据(以不同点为中心的3个正态分布)。我也做了一些直方图和箱形图,以备你想要的那些。 alpha参数控制填充的透明度,如果使用颜色而不是填充,则只获得轮廓

x <- data.frame(v1=rnorm(100),v2=rnorm(100,1,1),v3=rnorm(100,0,2))
library(ggplot2);library(reshape2)
data<- melt(x)
ggplot(data,aes(x=value, fill=variable)) + geom_density(alpha=0.25)
ggplot(data,aes(x=value, fill=variable)) + geom_histogram(alpha=0.25)
ggplot(data,aes(x=variable, y=value, fill=variable)) + geom_boxplot()

enter image description here

答案 1 :(得分:6)

为了完整起见,基于因子叠加图的最基本方法是:

ggplot(data, aes(x=value)) + geom_density(aes(group=factor))

但正如@ user1617979所述,aes(color=factor)aes(fill=factor)在实践中可能更有用。three density plots overlaid by factor

答案 2 :(得分:0)

有些人问,如果发行版的长度不同,您是否可以这样做。答案是肯定的,只需使用列表而不是数据框即可。

library(ggplot2)
library(reshape2)
x <- list(v1=rnorm(100),v2=rnorm(50,1,1),v3=rnorm(75,0,2))
data<- melt(x)
ggplot(data,aes(x=value, fill=L1)) + geom_density(alpha=0.25)
ggplot(data,aes(x=value, fill=L1)) + geom_histogram(alpha=0.25)
ggplot(data,aes(x=L1, y=value, fill=L1)) + geom_boxplot()