2012-01-03 22 views
20

當我使用geom_tile()ggplot2和離散秤標籤是在x軸升序順序和在y軸降序排列:GGPLOT2:一個因子可變的顯示的變化量級的軸線

#some sample data 
a <- runif(400) 
a <- matrix(a, ncol=20) 
colnames(a) <- letters[seq(from = 1, to = 20)] 
rownames(a) <- letters[seq(from = 1, to = 20)] 
a <- melt(a) 

當我繪製數據幀a這出來:

ggplot(a, aes(X1, X2, fill = value)) + geom_tile() + 
scale_fill_gradient(low = "white", high = "black", breaks=seq(from=0, to=1, by=.1), name="value") + 
opts(axis.text.x=theme_text(angle=-90, hjust=0)) + 
scale_x_discrete(name="") + scale_y_discrete(name="") 

和COORDS被標記爲不同的X和Y:

enter image description here

我想從上到下和從左到右排序從a-z的標籤。有沒有快速的方法來做到這一點?

+2

您可能還想爲當前的'scale_colour_gradient'命令添加一個'limits = c(0,1)' - 當前1超出了比例限制,並且在圖例中沒有正確着色。 – hadley 2012-01-04 01:47:47

+0

@hadley:非常感謝你!這可能會是我的第二個問題;) – Seb 2012-01-04 06:58:29

+0

如何不訂購y標籤呢?如果我有幾個月,例如J,F,M,A,M。它會自動排序。是否有可能重寫此默認行爲? 謝謝 – rmf 2012-04-03 13:12:25

回答

30

這裏重要的一點是因子水平的順序。等級中的順序也是圖中的順序。您可以使用rev扭轉這樣的級別的順序(注意,我只是重新排序在data.frame一列):

df$X1 = with(df, factor(X1, levels = rev(levels(X1)))) 

使用此語法根據需要重新安排你的因素。

+0

感謝您的快速幫助!但是這不會改變x *和* y軸。 X軸應該保持原樣。還是我錯了? – Seb 2012-01-03 14:29:32

+0

您可以分別更改data.frame中每個變量的級別順序。只需改變你需要的那些。 – 2012-01-03 14:31:47

+0

我編輯了我的答案來澄清這個問題。 – 2012-01-03 14:35:25

4

很多情況下你寧願不修改基礎數據因素的順序的情況下,你可以使用得到同樣的結果limits參數scale_y_discrete

ggplot(a, aes(X1, X2, fill = value)) + 
    geom_tile() + 
    scale_y_discrete(name="", limits = rev(levels(a$X2))) 

給予這樣的輸出:

enter image description here

相關問題