2011-03-30 132 views
32

您好我繪製使用R中ggplot一個小情節的順序,這裏是小區如何更改ggplot小標籤(自定義小包裝標籤)

http://i.stack.imgur.com/5qXF1.png

我的問題是,該刻面(標籤)按字母順序排序(例如:E1,E10,E11,E13,E2,E3,I1,I10,I2),但我需要它們是像E1,I1,E2,I2,E3,E10, I10,E11,E13。

我該怎麼做?

+5

重新排列潛在因素的順序。你可以使用''repvel()'或'reorder()'或者自定義命令並使用'factor()'。 – Chase 2011-03-30 18:53:49

回答

40

如果您提供的分組變量是而不是的因子,則不要依賴由factor()施加的級別的默認排序或在內部按ggplot。自己設置顯示級別。

dat <- data.frame(x = runif(100), y = runif(100), 
        Group = gl(5, 20, labels = LETTERS[1:5])) 
head(dat) 
with(dat, levels(Group)) 

如果我想讓它們按照這個任意順序怎麼辦?

set.seed(1) 
with(dat, sample(levels(Group))) 

要做到這一點,按照你想要的方式設置水平。

set.seed(1) # reset the seed so I get the random order form above 
dat <- within(dat, Group <- factor(Group, levels = sample(levels(Group)))) 
with(dat, levels(Group)) 

現在,我們可以用它來有順序繪製我們想面板:

require(ggplot2) 
p <- ggplot(dat, aes(x = x)) + geom_bar() 
p + facet_wrap(~ Group) 

主要生產:

facets wrapped

+1

非常感謝gavin :) – Jana 2011-03-30 22:10:28

0

僅僅是一個類似的工作問題。我有這樣的默認水平:

[1] "A1" "A10" "A2" "A3" "A4" "A5" "A6" "A7" "A8" "A9" 
[11] "B1" "B2" "B3" "B4" "B5" "B6" "B7" "B8" "B9" 

請注意,第二級由於字母順序不合適。

這是我在做什麼固定的順序:

reorder(factor(fct), 
     fct %>% 
      str_replace("([[:alpha:]]+)", "\\1|") %>% 
      str_split("\\|") %>% 
      sapply(function(d) sprintf("%s%02d", d[1], as.integer(d[2]))), 
     function(x) x[1]) 

它取代了像「A1」和「A01」的水平,然後根據這些進行重新排序。我相信你可以更有效地做到這一點,但它能做到這一點。

它可以適應解決原始問題。