2016-08-12 476 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'創建徑向網格線)。所以我認爲沒有明顯的方法使網格線(正確理解)成對角線,因爲在座標系的上下文中對於對角網格線沒有簡單的解釋。 –