首页 > 解决方案 > 将计算值从 stat_smooth 传输到 linerange 等其他几何图形

问题描述

我有一个关于 ggplot2 的问题。

我想通过垂直线数据点与 ols 结果连接起来,如下面的代码。

我可以将..y.., 计算的值直接转移stat_smooth到 ,吗?geom_linerange

我试过stat_smooth(..., geom = "linerange", mapping(aes(ymin=pmin(myy, ..y..), ymax=pmax(myy,..y..))了,但这不是我想要的结果。

library(ggplot2)
df <- data.frame(myx = 1:10,
                 myy = c(1:10) * 5 + 2 * rnorm(10, 0, 1))
lm.fit <- lm("myy~myx", data = df)
pred <- predict(lm.fit)
ggplot(df, aes(myx, myy)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  geom_linerange(mapping = aes(ymin = pmin(myy, pred),
                               ymax = pmax(myy, pred)))

标签: rggplot2

解决方案


stat_smooth默认情况下,计算n均匀间隔点n = 80的值。这些点可能与数据框中的原始 x 值不一致。

由于您无论如何都在计算预测值,因此将其添加回您的数据框并基于它作为您的数据源绘制所有几何图层可能会更直接,例如:

df$pred <- pred

ggplot(df, aes(myx, myy)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  geom_linerange(aes(ymin = myy, ymax = pred))

阴谋


推荐阅读