gpt4 book ai didi

r - stat_smooth 和 geom_ribbon 之间的不良交互

转载 作者:行者123 更新时间:2023-12-04 08:40:46 25 4
gpt4 key购买 nike

我在回答 this question ,这需要绘制平滑区域,但删除“无用”区域。在一个简单的 geom_area 上做到这一点(不流畅),我只用 geom_ribbonaes(ymax=y, ymin=min(y)) .但是转个stat_smooth(geom="area")stat_smooth(geom="ribbon", aes(ymax=y, ymin=min(y)))不会产生预期的结果。geom_areageom_ribbon (最后是虚拟数据):ggplot(df, aes(x=x, y=y)) + geom_area()ggplot(df, aes(x=x, y=y)) + geom_ribbon(aes(ymax=y, ymin=min(y))) enter image description here
现在是流畅版:ggplot(df, aes(x=x, y=y)) + stat_smooth(geom="area")ggplot(df, aes(x=x, y=y)) + stat_smooth(geom="ribbon", aes(ymax=y, ymin=min(y))) enter image description here
我想要的输出是这样的:
enter image description here
我找到了一些解决方案,其中涉及使用“平滑数据”制作新数据框,然后通常使用 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))

最佳答案

你的意思是这样的吗?如果你想在你的映射中使用一个计算变量,你需要用 after_stat() 包裹它. after_stat(y)表示“使用统计数据计算的 y 值,而不是原始数据框中的 y 值。”

library(ggplot2)

df <- data.frame(
x = 1:7,
y = c(12.44, 11.98, 11.40, 12.15, 13.14, 11.99, 12.17)
)

ggplot(df, aes(x=x, y=y)) +
geom_point() +
stat_smooth(
geom="ribbon",
aes(ymax = after_stat(y), ymin = after_stat(min(y))),
fill = "skyblue"
)
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'

创建于 2020-10-28 由 reprex package (v0.3.0)

关于r - stat_smooth 和 geom_ribbon 之间的不良交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64578056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com