R ggplot2中具有多个密度的多个地块

R ggplot2中具有多个密度的多个地块,r,ggplot2,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= 1

我正在尝试使用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"

我尝试了不同的刻度值,或者干脆省略了,但运气不好。我试图跟踪哪个对象被应用到“缩放维度”,但也没有运气。有谁能给我点化一下吗?

既然我不能留下评论来支持乔兰的建议(即,我没有足够的声誉),下面是一个答案:

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

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

此外,如果您将
geom_density
替换为
geom_bar
,它也可以工作

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

这只是一个猜测,但这可能与这样一个事实有关,即每个组只计算两个值的密度?当我使用更大的数据集创建类似的绘图时,我没有发现错误。感谢您的回复,这就是使用
geom\u density()
时的问题所在。当我尝试使用
geom_-line(stat='density')
时,问题仍然是一样的……但是……问题是一样的,不是吗?你仍然只计算两个值的密度。不,这次使用更多的值(100)来计算密度。
ggplot(data=rbind(esti,esti),aes(x=value,colour=estimator))
+ geom_density() +facet_wrap(~xp,scales='free_y')
ggplot(data=esti,aes(x=value,colour=estimator))
+ geom_bar() +facet_wrap(~xp,scales='free_y')