簡體   English   中英

ggplot2中重疊的密度圖

[英]Overlapped density plots in ggplot2

想象一下,我有兩個不同長度的向量。 我想生成一個圖,其中兩個矢量的密度重疊。 我認為我應該做的是:

vec1 <- data.frame(x=rnorm(2000, 0, 1))
vec2 <- data.frame(x=rnorm(3000, 1, 1.5))
ggplot() + geom_density(aes(x=x, colour="red"), data=vec1) + 
  geom_density(aes(x=x, colour="blue"), data=vec2)

然后我想我應該這樣做:

vec1 <- data.frame(x=rnorm(2000, 0, 1))
vec2 <- data.frame(y=rnorm(3000, 1, 1.5))
ggplot() + geom_density(aes(x=x, colour="red"), data=vec1) + 
  geom_density(aes(x=y, colour="blue"), data=vec2)

這些都不起作用,因為顏色混雜起來。

根據我在StackOverflow 1 2中找到的另一個解決方案,我意識到我應該嘗試這個:

vec1 <- data.frame(x=rnorm(2000, 0, 1), grp="vec1")
vec2 <- data.frame(x=rnorm(3000, 1, 1.5), grp="vec2")
allDat <- rbind(vec1, vec2)

ggplot(allDat, aes(x, colour=grp)) + geom_density()

ggplot(allDat, aes(x, colour=grp)) + geom_density() + 
  scale_colour_manual(values=c("green", "blue"))

ggplot(allDat, aes(x, colour=grp)) + geom_density() + 
  scale_colour_manual(values=c(vec2="green", vec1="blue"))

好的,我解決了原來的問題。 但有沒有辦法做一些類似我上面嘗試的第一個? ggplot文檔中的措辭ggplot ,我會這么認為。 感謝任何建議。

如果你將colour參數的賦值移出aes()那么一切都會正常工作。

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

library(ggplot2)

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

在此輸入圖像描述

如果你想要傳說,試試這個:

df <- rbind(data.frame(x=rnorm(2000, 0, 1), vec='1'),
            data.frame(x=rnorm(3000, 1, 1.5), vec='2'))
ggplot(df, aes(x, group=vec, col=vec)) + geom_density(position='dodge')

在此輸入圖像描述

我對上述解決方案有些麻煩,因為我的數據包含在一個數據框中。 在美學中使用... data=df$A不起作用,因為這將為ggplot提供類“vector”的向量,這是不受支持的。

因此,為了覆蓋同一數據框中包含的不同列,我建議:

vec1 <- rnorm(3000, 0, 1)
vec2 <- rnorm(3000, 1, 1.5)

df <- data.frame(vec1, vec2)
colnames(df) <- c("A", "B")

library(ggplot2)

ggplot() + geom_density(aes(x=df$A), colour="red") + 
  geom_density(aes(x=df$B), colour="blue")

在此輸入圖像描述

對於大多數人來說,這似乎是顯而易見的,但對我來說,作為初學者,事實並非如此。 希望這可以幫助。

暫無
暫無

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

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