我正在尝试在同一图上绘制两个矢量的多个重叠密度图。据我所知,除非他们在同一个对象中,否则我无法这样做。
为了绘制数据,我需要有一个带有两列的data.frame();一个用于值,一个用于指定每个值属于哪个向量。
我的第一个矢量包含400个数据。第二个包含1200.我当前(有点不优雅)的解决方案包括将两个向量连接成一个新的data.frame向量,并将第二个向量添加到包含400'a和1200'b的data.frame,以指示哪个向量原始数据来自。这只能起作用,因为我知道每个原始矢量中有多少数据。
当然必须有更有效的方法来做到这一点?
假设我的原始数据来自dframe1$vector
和dframe2$vector
。我正在寻找创建一个名为dframe3
的新对象,其中包含$value
和$original_vector_number
列。我该怎么做?
答案 0 :(得分:1)
您正试图解决您不需要解决的问题。您不需要将它们放在同一个对象中以绘制其密度。只需使用lines
。
x <- rnorm(400,0,1)
y <- rnorm(1200,2,2)
plot(density(x))
lines(density(y))
答案 1 :(得分:-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()