網格/視口方法會像這樣工作。首先,我們安排一些數據以匹配您所展示的內容。我們旋轉因子的水平爲每X
,Y
和Z
你在問題中
## 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頁。
這將產生:
我想你會更好分別做3個情節和使用一些電網的功能來推動情節到視在單個設備上安排的地塊。ggplot預計數據將作爲連貫的組塊,並且不會因爲不同的面板而在內部動態改變因素的順序。如果你對網格視口的東西感興趣,我可以根據這些線提供答案? – 2011-04-19 10:58:21
[如何在多面ggplot2條形圖中訂購條形圖]可能的重複(http://stackoverflow.com/questions/5409776/how-to-order-bars-in-faceted-ggplot2-bar-chart) – 2011-04-19 11:08:41