2016-02-16 40 views
0

我有数据为(ur_memr_t $ up ...)制作了直方图。然后,我使用fitdistr来拟合数据的指数分布。我捕获了拟合分布的参数并生成了一些随机变量。然后我为exp随机变量做了一个密度曲线。我想把密度放在直方图上。下面的代码引发此错误在数据直方图上覆盖指数密度

exp_data <- data.frame(x = rexp(3000, rate = 0.0144896182)) 

    ggplot(data = ur_memr_t, aes(ur_memr_t$updated_days_to_next_ur)) + 
    geom_histogram() + ggplot(exp_data, aes(x)) + geom_density() 

Error in p + o : non-numeric argument to binary operator 
In addition: Warning message: 
Incompatible methods ("+.gg", "Ops.data.frame") for "+" 

如果我运行

ggplot(data = ur_memr_t, aes(ur_memr_t$updated_days_to_next_ur)) + 
    geom_histogram() 

ggplot(exp_data, aes(x)) + geom_density() 

seperately,他们产生正确的地块。为什么他们不能一起工作,并将其中一个放在另一个之上?

+0

如果你创建了一个[重复的例子(这将是有益http://stackoverflow.com/questions/5963269/how-to-make-a -great-R再现的-例子)。由于我们无法访问'um_memr_t',因此我们无法运行您的代码。你不能添加两个'ggplot'对象。通常,您只需添加具有不同数据源和映射的新图层。像'ggplot()+ geom_histogram(data = ur_memr_t,aes(updated_days_to_next_ur,..density ..))+ geom_density(data = exp_data,aes(x),color =“red”)''应该是相近的。请注意,计数和密度在不同的比例 – MrFlick

+0

也经常询问这个问题。我建议寻找类似的答案:http://stackoverflow.com/questions/5688082/ggplot2-overlay-histogram-with-density-curve – MrFlick

回答

0

我认为它应该工作,但你只能有一个ggplot声明。尝试是这样的:

g = ggplot(data = ur_memr_t, aes(ur_memr_t$updated_days_to_next_ur)) 
g = g + geom_histogram(aes(ur_memr_t$updated_days_to_next_ur)) 
g = g + geom_density(data = exp_data, aes(x)) 

希望它可以帮助