与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的良好设计,我确信必须有一个很好的逻辑原因,但我一直无法理解它。
有人可以向我解释一下吗?
答案 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')
但是,将geom_abline
,geom_hline
,geom_vline
与尺度一起使用似乎存在更普遍的问题。有关详细信息,请参阅here。