簡體   English   中英

使用R中的ggplot繪制多個變量的密度圖

[英]Density plot for numerous variables using ggplot in R

我能夠只為y1和y2創建geom_point()圖,但我希望能夠創建一個密度圖,使我可以使用很多(我使用5 y變量作為示例,但我會至50 y個變量)

這是我創建的一些玩具數據作為參考:

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"))
}

如果有人可以幫助我,將不勝感激!

ggplot最適合長格式的數據。 因此,使用stack重塑數據可以輕松分離每列的密度曲線。

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

在此處輸入圖片說明

如果要像在for循環中一樣將變量名傳遞給aes ,請改用aes_string ,即

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

但是,這並不是那么好,因為很難將顏色,形狀等美感應用到不同的曲線上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM