2016-08-12 295 views
4

是否可以通过将对角线添加到网格的方式来调整ggplot2ggplot2:将对角线添加到网格

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

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仍然会将此“变通办法数据”视为实际数据。这是我想要避免的。

回答

4

geom_abline怎么样?

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

enter image description here

+0

我不知道,你可以给它拦截的载体:-) +1 – AlexR

+0

事实上,这甚至更好的解决方法。但是,例如,在处理'scale_x_date'时,它会变得很麻烦。另外,尽管可以使用theme()来回顾修改垂直和水平网格线,但geom_abline不能。 –

+0

我花了一些时间浏览'ggplot2'代码库。我不是一个培训或交易的开发人员,所以请尽量少用一点盐,但从研究代码库的意义上来说,网格线意在反映坐标系(例如, coord_polar'创建径向网格线)。所以我认为没有明显的方法使网格线(正确理解)成对角线,因为在坐标系的上下文中对于对角网格线没有简单的解释。 –