1

我正在尝试在同一个图形上为两个向量绘制多个叠加密度图。据我所知,除非它们在同一个对象中,否则我无法这样做。

为了绘制数据,我需要一个带有两列的 data.frame();一个用于值,一个用于指定每个值所属的向量。

我的第一个向量包含 400 个数据。第二个包含 1200。我当前(有点不雅)的解决方案包括将两个向量连接成一个新的 data.frame 向量,并将第二个向量添加到包含 400 个“a”和 1200 个“b”的 data.frame,以指示哪个向量原始数据来自。这只有效,因为我知道每个原始向量中有多少数据。

当然必须有更有效的方法来做到这一点?

假设我的原始数据来自dframe1$vectorand dframe2$vector。我正在寻找一个名为的新对象dframe3,其中包含列$value$original_vector_number. 我该怎么做呢?

4

2 回答 2

1

你正在尝试解决一个你不需要解决的问题。您不需要将它们放在同一个对象中来绘制它们的密度。只需使用lines.

x <- rnorm(400,0,1)
y <- rnorm(1200,2,2)
plot(density(x))
lines(density(y))
于 2013-07-01T15:57:08.240 回答
-1

如果您不想手动执行此操作,请使用library(reshape)并且:melt

library(reshape)
dframe <- data.frame(a = rnorm(400,1,1),b = rnorm(1200,1.2,2))
df.m <- melt(dframe)
library(ggplot2)
ggplot(df.m,aes(x = value,color = variable)) + geom_density()

请注意,这并不能真正提供正确的答案,因为将数据框放在一起确实会扩展两者中较小的一个以适应行数。执行此操作并在 ggplot 中绘图的正确方法如下:

用手:

vecA <- data.frame(rnorm(400,1,1),'a')
vecB <- data.frame(rnorm(1200,1.2,2),'b')
names(vecA) <- c('value','name')
names(vecB) <- c('value','name')
dtf <- rbind(vecA,vecB)
library(ggplot2)
ggplot(dtf,aes(x=value,color=name))+geom_density()
于 2013-07-01T16:12:23.873 回答