2014-01-12 169 views
0

這是我在ggplot2: Adding secondary transformed x-axis on top of plot的問題的後續處理,其中我使用一個繪圖中的軸作爲另一個繪圖上的頂部軸。問題在於這兩個圖的蜱蟲和柵格並不與彼此對齊,所以使用另一個圖上的一個圖的軸(以及相關聯的柵格和數據)意味着底部軸與柵格不匹配。ggplot2:不對應於刻度的網格線,或添加自定義網格?

我已經找到了解決方法,但它需要先構建一個繪圖,其中x軸刻度與網格線不匹配。我可以定義柵格和蜱應該在哪裏,但無法弄清楚如何繪製這樣的東西。我希望有人能告訴我我做錯了什麼。

我意識到網格和刻度線必須在ggplot中對齊,但我在How can I add a background grid using ggplot2?處遇到另一個帖子,它提供了一個非常接近我需要的解決方案。

按照該解決方案,我可以刪除網格和使用geom_segment繪製一個「網格」:

pts <- data.frame(x=c(170, 170, 170, 170, 177.5, 185), 
       y=c(-35, -25, -15, -35, -35, -35), 
       xend=c(185, 185, 185, 170, 177.5, 185), 
       yend=c(-35, -25, -15, -15, -15, -15)) 
ggplot(quakes, aes(long, lat)) + geom_point(shape = 1) + 
    geom_segment(data=pts, aes(x, y, xend=xend, yend=yend), color="white") + 
    theme(panel.grid.minor = element_blank(), 
     panel.grid.major = element_blank()) 

然而,在例如創建的網格線看上去並不像一個真正的電網,因爲他們不不會延伸到情節的邊緣。爲了使它們看起來像真正的網格線,我需要它們延伸到圖的邊緣。我想我可以定義pts位於圖的外面,以便在pts之間繪製的線將延伸到邊緣。例如,

pts <- data.frame(x=c(170, 170, 170, 170, 177.5, 185), 
       y=c(-35, -25, -15, -35, -35, -35), 
       xend=c(185, 185, 185, 170, 177.5, 185), 
       yend=c(-35, -25, -15, -15, -15, -15)) 
ggplot(quakes, aes(long, lat)) + geom_point(shape = 1) + scale_x_continuous(limits=c(172.5, 182.5)) + 
    scale_y_continuous(limits=c(-30, -20)) + 
    geom_segment(data=pts, aes(x, y, xend=xend, yend=yend), color="white") + 
    theme(panel.grid.minor = element_blank(), 
     panel.grid.major = element_blank()) 

然而,由於該點的情節外,ggplot刪除缺失值,不繪製線條。 任何人都可以告訴我,如果有辦法讓這項工作?或者,有誰能告訴我是否有更好的方法來做我想做的事情?

謝謝!

回答

1

爲了確保繪製區域外的點不會被刪除設定的情節限制coord_cartesian()內(將「縮小」你的情節),而不是scale_..()功能(即裁剪區域外的所有數據)

ggplot(quakes, aes(long, lat)) + geom_point(shape = 1) + 
    geom_segment(data=pts, aes(x, y, xend=xend, yend=yend), color="white") + 
    theme(panel.grid.minor = element_blank(), 
     panel.grid.major = element_blank())+ 
    coord_cartesian(xlim=c(172.5, 182.5),ylim=c(-30, -20)) 

enter image description here

+0

Didzis,你知道我怎麼能獲得積分落後於新的網格線(而不是在上面)?我希望這些線條出現在點之後,就像常規網格一樣。謝謝! – Thomas

+0

只需顛倒geom_point()和geom_segment()的順序(按照它們在代碼中使用的順序添加點和片段) –