为什么geom_line不尊重scale_x_reverse?

时间:2015-02-19 09:45:38

标签: r ggplot2 visualization

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

例如,以下代码会在标识后创建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的良好设计,我确信必须有一个很好的逻辑原因,但我一直无法理解它。

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

所以答案是这只是一个错误。它与geom_segment中的problem有关。它在aes内指定aestetics时有效,但不是。

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')

problem with geom_segment

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