ggplot2:向网格添加对角线

4

是否可以调整 ggplot2,使其在网格中添加对角线?

显然,默认的网格由垂直和水平线组成:

df <- data.frame(a = sample(0:100, 100, T), b = sample(0:100, 100, T))
gg <- ggplot() + geom_point(data = df, aes(x = a, y = b))
gg

plot1

我想要修改默认行为,以实现由垂直线、水平线和对角线组成的网格。一种比较麻烦的方法是使用线段:

d <- data.frame(x = c(0,0,0,0,25,50,75),
                y = c(75,50,25,0,0,0,0),
                xend = c(25,50,75,100,100,100,100),
                yend = c(100,100,100,100,75,50,25))


gg + 
  geom_segment(data = d, aes(x = x, y = y, xend = xend, yend = yend), colour = "white")

plot2

这似乎是一种解决方法。但实际上需要的分段数取决于数据的范围。虽然可以编写一个函数来计算考虑对角线之间所需空间的分段数,但ggplot2仍将处理此“解决方法数据”作为实际数据。这正是我想避免的。

1个回答

6

geom_abline怎么样?

gg + geom_abline(intercept=seq(-100, 100, 25),
                 slope=1,
                 colour="white")

enter image description here


我不知道你可以给它一个截距向量 :-) +1 - AlexR
实际上,这是一个更好的解决方法。但是当处理 scale_x_date 时,会变得非常麻烦。此外,虽然可以使用 theme() 来回顾性地改变垂直和水平网格线,但是 geom_abline 却不能。 - user2911296
1
我花了一些时间浏览ggplot2的代码库。虽然我不是一个专业的开发人员,但从研究代码库中得出的感觉是,网格线应该反映坐标系(例如,coord_polar创建径向网格线)。因此,我认为没有明显的方法可以使网格线(正确理解)呈对角线状,因为在坐标系的背景下,对角线网格线没有易于解释的方式。 - Weihuang Wong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接