当我尝试使用ggplot2重叠密度图时,为什么会出现错误?

时间:2014-06-12 10:14:09

标签: r

我想创建重叠密度图。我决定使用ggplot2。

我的数据是数据框格式。 在这里他们看起来如何:

Ge<-data.frame(Ge)
dim(Ge)
#[1] 100   1
Ge[1:4,]
#[1]   6.005409  38.681342 102.079283 185.672611
dim(Tr)
#[1] 100   1
Tr[1:4,]
#[1] 12.8678547  1.3034715  1.1372413  0.7973491

这是我创建剧情的代码:

library(ggplot2)

ggplot() + geom_density(aes(x=x), colour="red", data=Tr) + 
  geom_density(aes(x=x), colour="blue", data=Ge)

但这是我得到的错误:

    Don't know how to automatically pick scale for object of type data.frame. Defaulting to continuous
Error: stat_density requires the following missing aesthetics: x

有人会帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您应该使用ggplot尽可能使用单个数据框。这是语法背后的逻辑,但最初是不直观的。考虑到您的示例代码,TrGe是因素,并且您在一个公共x轴上有一组值。

reshape2包有一个方便的工具,可以将单独的数据组合成适合ggplot绘图的格式melt。查看软件包文档,但请参阅下面的工作代码和示例输出。

require(ggplot2)
require(reshape2)
Ge=runif(n=100)
Tr=runif(n=100)
data=data.frame(Ge,Tr)
names(data)=c('Ge','Tr')
data=melt(data,id.vars=NULL)
ggplot(data,aes(x=value,fill=variable))+geom_density(alpha=.4)

Hadley Wickham写了一本书,详细介绍了所有这些信息。 Amazon link

<强>更新 我已经更密切地复制了OP的代码(偏离了最佳实践)并且仍然得到了一个功能情节,尽管有警告。

Ge=data.frame(runif(n=100))
Tr=data.frame(runif(n=120))

ggplot()+geom_density(aes(data=Ge,x=Ge[,1]),color='red')+
  geom_density(aes(data=Tr,x=Tr[,1]),color='blue')
  

不知道如何自动选择类型对象的比例   data.frame。默认为连续不知道如何自动   为data.frame类型的对象选择比例。默认为连续