ggplot2中具有多个密度的多个图

时间:2012-05-25 09:14:26

标签: r ggplot2

我试图在图表上使用facet_wrap()共享一个共同的图例。这些图包含4个密度估计值,每个密度估计值使用geom_density()构建。这是数据外观的最小示例。针对每个估计器级别估计一个密度,并且针对xp的每个值绘制不同的图。

    > esti
    estimator      value           xp
1      OLS Oracle 0.35757317 N= 10 T= 100
2      OLS Oracle 0.50540655 N= 10 T= 100
3        OLS Full 0.02276872 N= 10 T= 100
4        OLS Full 0.53616020 N= 10 T= 100
5           Lasso 0.00000000 N= 10 T= 100
6           Lasso 0.30448578 N= 10 T= 100
7  Adaptive Lasso 0.00000000 N= 10 T= 100
8  Adaptive Lasso 0.49949267 N= 10 T= 100
9      OLS Oracle 0.48392914 N= 10 T= 500
10     OLS Oracle 0.53685915 N= 10 T= 500
11       OLS Full 0.50565482 N= 10 T= 500
12       OLS Full 0.61407003 N= 10 T= 500
13          Lasso 0.38342782 N= 10 T= 500
14          Lasso 0.52012928 N= 10 T= 500
15 Adaptive Lasso 0.47951875 N= 10 T= 500
16 Adaptive Lasso 0.53222172 N= 10 T= 500

我可以用四种密度构建一个图:

library('ggplot2')
ggplot(data=esti,aes(x=value,colour=estimator)) + geom_density()

或者两个面板,每个面板有一个密度:

ggplot(data=esti,aes(x=value)) + geom_density() +facet_wrap(~xp,scales='free_y')

然而,两者一起不起作用并导致错误:

> ggplot(data=esti,aes(x=value,colour=estimator)) + geom_density() +facet_wrap(~xp,scales='free_y')
Error in UseMethod("scale_dimension") : 
  no applicable method for 'scale_dimension' applied to an object of class "NULL"

我已尝试过不同的音阶值,或完全省略它,没有运气。我试图跟踪哪个对象被应用于'scale_dimension',也没有运气。谁能开导我?

1 个答案:

答案 0 :(得分:2)

由于我不能发表评论以便提出第二个joran的建议(即我没有足够的声誉),这里有一个答案:

开始
 ggplot(data=esti,aes(x=value,colour=estimator)) + geom_density()

 ggplot(data=esti,aes(x=value,colour=estimator))
 + geom_density() +facet_wrap(~xp,scales='free_y')

每个估算器/ xp对只剩下2个数据点。看起来,这还不足以计算密度。 例如,以下代码行有效(注意data=rbind(esti,esti)

ggplot(data=rbind(esti,esti),aes(x=value,colour=estimator))
+ geom_density() +facet_wrap(~xp,scales='free_y')

此外,如果您将geom_density替换为geom_bar,则可以

ggplot(data=esti,aes(x=value,colour=estimator))
+ geom_bar() +facet_wrap(~xp,scales='free_y')