为什么 geom_abline 不尊重 scales_x_reverse?

Why geom_abline does not honor scales_x_reverse?

scale_x_reverse 结合使用时,我一直在努力使用 geom_abline 命令。

例如,以下代码创建了一个由 10 个点组成的图。我可以使用 scale_x_reverse 反转 x 轴,但是当我使用 geom_abline 添加身份时,红色身份线不会反转。

ggplot(data.frame(x=seq(1,10),y=seq(1,10))) + 
  geom_point(aes(x=x,y=y)) +
  geom_abline(color="red") +
  scale_x_reverse(limits=c(10,-10)) + 
  scale_y_continuous(limits=c(-10,10)) + 
  ggtitle("I would expect the red line to be on top of the points")

似乎 geom_abline 绘制了一条 intercept=0, slope=1 的线,但不支持比例变换。

作为一种解决方法,我知道我可以强制斜坡做我想做的事:

ggplot(data.frame(x=seq(1,10),y=seq(1,10))) + 
  geom_point(aes(x=x,y=y)) +
  geom_abline(intercept=0, slope=-1, color="red") +
  scale_x_reverse(limits=c(10,-10)) + 
  scale_y_continuous(limits=c(-10,10)) + 
  ggtitle("I would expect the red line to be on top of the points")

我发现这种 geom_abline 行为令人困惑,我不明白为什么要这样实施。鉴于ggplot的良好设计,我相信一定有一个很好的逻辑原因,但我一直无法理解。

谁能给我解释一下吗?

所以答案是这只是一个错误。它与geom_segment中的一个problem有关。当在 aes 内指定美学时它起作用,但在其他情况下不起作用。

ggplot(data.frame(x=seq(1,10),y=seq(1,10))) + 
  geom_point(aes(x=x,y=y)) +
  scale_x_reverse() + 
  geom_segment(x = -10, xend=10, y=-10, yend=10, color='blue') +
  geom_segment(data = data.frame(x = -10, xend=10, y=-10, yend=10), 
               aes(x=x, y=y, xend=xend, yend=yend),
               color='red')

但是,将 geom_ablinegeom_hlinegeom_vline 与比例一起使用似乎存在更普遍的问题。有关详细信息,请参阅 here