使用R中的ggplot的多个变量的密度图

时间:2015-08-04 22:45:12

标签: r ggplot2

我能够为y1和y2创建一个geom_point()图但我希望能够创建一个允许我使用很多的密度图(我使用5 y变量作为示例)但我最多会有50个变量)

这是我作为参考创建的一些玩具数据:

y1          y2          y3          y4          y5
0.000000    0.000000    0.000000    0.000000    0.000000
0.000100    0.000000    0.000100    0.000100    0.000000
0.000100    0.000100    0.000400    0.000200    0.000000
0.000100    0.000100    0.000400    0.000200    0.000100
0.000300    0.000100    0.000300    0.000200    0.000100
0.000300    0.000100    0.000000    0.000000    0.000300
0.000300    0.000100    0.000000    0.000200    0.000600
0.000400    0.000200    0.000100    0.000100    0.000500
0.000500    0.000100    0.000100    0.000100    0.000400
0.000500    0.000300    0.000100    0.000000    0.000700
0.000700    0.000400    0.000100    0.000300    0.000700
0.001100    0.000400    0.000100    0.000200    0.000900

基本上,这些值是参考点变化的绝对值(显然,我使用系列中的第一个x值作为参考)。我希望看到数据变化的密度(或带有内核平滑的直方图),其中x值是第1天,第2天,第3天,......第12天的类别。

就像我说的,我想我想要像

这样的东西
setwd("null")
data <- read.table("data.csv", header=TRUE, sep=",")
n <- 5 # number of variables

for (i in 1:n) {
ggplot(data,aes(x=time, y = paste0("day.", i),color="grey"))
    +geom_density() + geom_density(aes(y = paste0("day.", i+1),color="grey"))
}

如果有人能帮助我,我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

ggplot最适合使用长格式的数据。因此,使用stack重塑数据可以轻松分离每列的密度曲线。

dat <- stack(data)
ggplot(dat, aes(x=values, fill=ind)) + geom_density(alpha=0.5)

enter image description here

如果您想将aes循环中的变量名称传递给for,请改用aes_string,即

p <- ggplot(data)
for (n in names(data))
    p <- p + geom_density(aes_string(x=n))

但是,由于难以将颜色,形状等美学应用于不同的曲线,因此它几乎没有那么好。