我正在回答这个问题 https://stackoverflow.com/questions/64574595/geom-density-returns-plot-without-considering-real-values,这需要绘制平滑区域,但删除“无用”区域。要在一个简单的geom_area
(不顺利),我只是用geom_ribbon
with aes(ymax=y, ymin=min(y))
。但转一个stat_smooth(geom="area")
into a stat_smooth(geom="ribbon", aes(ymax=y, ymin=min(y)))
没有产生预期的结果。
geom_area
to geom_ribbon
(最后的虚拟数据):
ggplot(df, aes(x=x, y=y)) + geom_area()
to ggplot(df, aes(x=x, y=y)) + geom_ribbon(aes(ymax=y, ymin=min(y)))
现在是平滑版本:
ggplot(df, aes(x=x, y=y)) + stat_smooth(geom="area")
to ggplot(df, aes(x=x, y=y)) + stat_smooth(geom="ribbon", aes(ymax=y, ymin=min(y)))
我想要的输出是这样的:
我找到了一些解决方案,涉及使用“平滑数据”制作新的数据框,然后通常使用geom_ribbon
,但这仅适用于您具有已知函数并且可以轻松生成更多观察结果的情况。另一种尝试是将 y 限制设置为ylim(min(y), max(y))
,但 ggplot 不会绘制任何“陷入”限制的几何图形,所以也许如果有办法改变该功能,这将是解决我的问题的一种方法。
虚拟数据:
df <- data.frame(
x = 1:7,
y = c(12.44, 11.98, 11.40, 12.15, 13.14, 11.99, 12.17))