【问题标题】:ggplot2: geom_smooth confidence band does not extend to edge of graph, even with fullrange=TRUEggplot2:geom_smooth 置信带不会延伸到图的边缘,即使 fullrange=TRUE
【发布时间】:2023-04-06 01:41:02
【问题描述】:

我一直在努力在 ggplot2 中生成一些散点图,发现我的 geom_smooth se 阴影(与 stat_smooth 完全相同的问题)不会扩展我的情节的全部范围(见情节图片),这让我抓狂.

您可以从代码中看到我使用了“fullrange = TRUE”,它确实扩展了线条本身(以及我的另一条拟合线上的 se 阴影),但无论出于何种原因,我的一条拟合线上的阴影都被阻碍了.

这似乎是一个与情节的上限冲突的问题。如果我将范围扩大到线触及右边界的点,阴影继续没有问题,但这样做不是一种选择,因为我必须将 x 和 y 轴范围加倍才能实现这一点,这会挤压我的数据。

有谁知道如何让阴影一直延伸到上轴边界?

【问题讨论】:

  • 请将您的代码放在问题本身中,而不是附上代码的图像。将代码放入问题中后,请务必使用 Ctrl+K 正确格式化。

标签: r ggplot2


【解决方案1】:

除了scale_x/y_continuous 之外,您可能还需要添加coord_cartesianscale_x/y_continuous 会删除图表范围之外的点,但coord_cartesian 会覆盖它并使用所有数据,即使其中一些数据在图表中不可见。在您的图中,红色点的置信带结束于带顶部超出图表 y 范围的位置。

在您的图表的扩展范围内没有实际的“数据”,但geom_smooth 将它生成的用于绘制置信带的点视为“数据”,以便决定绘制什么。

看看下面的例子。第一个情节仅使用scale_x/y_continuous。第二个添加coord_cartesian,但请注意,仍然没有绘制置信带。在第三个图中,我们仍然使用coord_cartesian,但我们向下扩展了scale_y_continuous 范围,以便置信带中低于零的点包含在y 范围内。但是,coord_cartesian 决定了实际绘制的范围,还可以防止排除范围之外的点。

我实际上发现这种行为令人困惑。我原以为您可以单独使用 coord_cartesian 和所需的 x 和 y 范围,并且仍然可以将置信带和回归线一直绘制到图表的边缘。无论如何,希望这能满足您的需求。

p1 = ggplot(mtcars, aes(wt, mpg, colour=factor(am))) + 
  geom_smooth(fullrange=TRUE, method="lm") +
  scale_x_continuous(expand=c(0,0), limits=c(0,10)) +
  scale_y_continuous(expand=c(0,0), limits=c(0,100)) +
  ggtitle("scale_x/y_continuous")

p2 = ggplot(mtcars, aes(wt, mpg, colour=factor(am))) + 
  geom_smooth(fullrange=TRUE, method="lm") +
  scale_x_continuous(expand=c(0,0), limits=c(0,10)) +
  scale_y_continuous(expand=c(0,0), limits=c(0,100)) +
  coord_cartesian(xlim=c(0,10), ylim=c(0,100)) +
  ggtitle("Add coord_cartesian; same y-range")

p3 = ggplot(mtcars, aes(wt, mpg, colour=factor(am))) +
  geom_smooth(fullrange=TRUE, method="lm") +
  scale_x_continuous(expand=c(0,0), limits=c(0,10)) +
  scale_y_continuous(expand=c(0,0), limits=c(-50,100)) +
  coord_cartesian(xlim=c(0,10), ylim=c(0,100)) +
  ggtitle("Add coord_cartesian; expanded y-range")

gridExtra::grid.arrange(p1, p2, p3)

【讨论】:

猜你喜欢
  • 2013-08-30
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 2019-10-23
相关资源
最近更新 更多