2012-05-26 80 views
1

您好我得到了与以下结构的数据帧weekly.mean.valuesGeom_ribbon()刚刚转图空白

week:mean:ci.lower:ci.upper 

凡星期是一个因素;意思是,ci.lower和ci.upper是数字。每周,只有一个意思,一个ci.lower或ci.upper。

我试图绘制围绕平均值的95%置信区间内阴影区,用下面的代码:

ggplot(weekly.mean.values,aes(x=week,y=mean)) + 
    geom_line() + 
    geom_ribbon(aes(ymin=ci.lower,ymax=ci.upper)) 

情节,然而,就出来了空白(即只用X-轴和y轴存在,但没有线或点,更不用说阴影区域)。

如果我删除了geom_ribbon部分,我确实得到了一条线。我知道这应该是一个非常简单的任务,但我不知道为什么我不能让geom_ribbon绘制我想要的东西。任何暗示都会得到真正的赞赏。

+3

您应该提供一个说明此行为的小型[reproducible](http://stackoverflow.com/q/5963269/324364)示例。我们很难神奇地知道电脑上发生了什么。 – joran

回答

0

我可能会遗漏一些东西,但是默认情况下,功能区将被标记为填充grey20。您正在将此图层绘制在数据的顶层上,因此难怪它会遮挡它。另外,从提供给最初的ggplot()呼叫的数据导出的绘图轴限制也可能不足以包含置信区间带。在这种情况下,我不会惊讶地看到一个灰色/空白的情节。

要看到,如果这是问题,请尝试改变你geom_ribbon()行:

geom_ribbon(aes(ymin=ci.lower,ymax=ci.upper), alpha = 0.5) 

将绘制与透明带whic应该下方显示的数据,如果有什么问题,我认为它是。

如果是这样,请将x和y限制设置为数据范围+/-要绘制的置信区间并交换图层的顺序(即在功能区顶部绘制线条),然后使用透明度在功能区显示通过它的网格。

1

我意识到这个线程是超级老,但谷歌仍然找到它。

答案是您需要设置yminymax以使用您在y-axis上使用的部分数据。它将它们设置为标量值,然后功能区从上到下覆盖整个绘图。

您可以使用

ymin=0 
ymax=mean 

从0到去你y-point甚至

ymin=mean-1 
ymax=mean+1 

有色带盖条包含实际数据。

0

ggplot's docsgeom_ribbon(2.1.0):

对于每个连续的X值,geom_interval显示一个ÿ间隔。 geom_areageom_ribbon的特殊情况,其中范围的最小值固定为0。

在这种情况下,x值不能作为geom_ribbon的因子。一种解决方案是将week从因子转换为数字。例如

ggplot(weekly.mean.values,aes(x=as.numeric(week),y=mean)) + 
    geom_line() + 
    geom_ribbon(aes(ymin=ci.lower,ymax=ci.upper)) 

geom_line应处理从因子到数字开关无事,虽然在X轴的刻度可以显示不同。