2011-04-19 389 views
2

我正在使用facet_wrapcoord_polar繪製一些餅圖,假設我有序列AB,C的因子。 D,對於x軸以及使用facet_wrap(對於3個圖表,比方說)和coord_polar。我會有3個派(派X,Y,Z)與排列爲A,B,CD順時針方向。排列ggplot2中堆疊geom_bar的順序

出現問題時,我想重新安排的因素level分別爲每個方面,如:

A B C D 
X 10 20 30 40 
Y 20 30 40 10 
Z 30 40 10 20 

我想:

餡餅X被安排爲:ABCD順時針方向

餅餡餅Y排列爲:D,A, BC順時針方向

餅餡餅Z排列爲:C,D,AB順時針方向

我可以在ggplot2中做到嗎?謝謝。

+0

我想你會更好分別做3個情節和使用一些電網的功能來推動情節到視在單個設備上安排的地塊。ggplot預計數據將作爲連貫的組塊,並且不會因爲不同的面板而在內部動態改變因素的順序。如果你對網格視口的東西感興趣,我可以根據這些線提供答案? – 2011-04-19 10:58:21

+0

[如何在多面ggplot2條形圖中訂購條形圖]可能的重複(http://stackoverflow.com/questions/5409776/how-to-order-bars-in-faceted-ggplot2-bar-chart) – 2011-04-19 11:08:41

回答

7

網格/視口方法會像這樣工作。首先,我們安排一些數據以匹配您所展示的內容。我們旋轉因子的水平爲每XYZ你在問題中

## Your data 
dat <- data.frame(X = factor(rep(LETTERS[1:4], times = c(10,20,30,40)), 
          levels = LETTERS[1:4]), 
        Y = factor(rep(LETTERS[1:4], times = c(20,30,40,10)), 
          levels = LETTERS[c(4,1:3)]), 
        Z = factor(rep(LETTERS[1:4], times = c(30,40,10,20)), 
          levels = LETTERS[c(3:4,1:2)])) 

接下來我們生產的各個餡餅地塊指定,旋轉相同scale_fill_manual()顏色以相同的順序,我們旋轉的水平數據,dat(與道歉討厭的顏色 - 是怎麼開始的第一n色彩,ggplot通常會使用?):

p1 <- ggplot(dat, aes(x = factor(1), fill = factor(X))) + 
      geom_bar(width = 1) + coord_polar(theta = "y") + 
      scale_fill_manual(value = c("red","green","yellow","blue")) 
p2 <- ggplot(dat, aes(x = factor(1), fill = factor(Y))) + 
      geom_bar(width = 1) + coord_polar(theta = "y") + 
      scale_fill_manual(value = c("red","green","yellow","blue")[c(4,1:3)]) 
p3 <- ggplot(dat, aes(x = factor(1), fill = factor(Z))) + 
      geom_bar(width = 1) + coord_polar(theta = "y") + 
      scale_fill_manual(value = c("red","green","yellow","blue")[c(3:4,1:2)]) 

現在,我們需要一個新的繪圖頁面,並推到它的2x2佈局:

grid.newpage() 
pushViewport(viewport(layout = grid.layout(2,2))) 

自定義功能允許我們簡化設置行/列的每個後續情節:

vplayout <- function(x, y) { 
    viewport(layout.pos.row = x, layout.pos.col = y) 
} 

接下來,我們簡單地畫出每個保存ggplot對象上正確的視口,通過參數vp規定:

print(p1, vp = vplayout(1,1)) 
print(p2, vp = vplayout(1,2)) 
print(p3, vp = vplayout(2,1)) 

上述網格代碼取自哈德利在ggplot上的優秀書籍的第94頁。

這將產生:

pie charts and viewport layout