2011-03-30 3 views
32

ggplot içinde faset etiketleri (özel faset sarma etiketler) sırasını değiştirmek ve nasıl komplodur ben Sorun,burada Merhaba Ar ggplot kullanarak bir faset arsa çizilen

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

ebatlar (etiketler) alfabetik olarak sıralanır (Örn: E1, E10, E11, E13, E2, E3, I1, I10, I2) ancak bunların E1, I1, E2, I2, E3, E10 gibi özel bir sipariş olması gerekir. I10, E11, E13.

Bunu nasıl yapabilirim? Eğer tedarik gruplama değişken değil bir faktör ise

+5

Temel faktörün sırasını yeniden düzenleyin. Relevel() 'veya' reorder() 'işlevini kullanabilir veya özel bir sipariş verebilir ve' factor() 'işlevini kullanabilirsiniz. – Chase

cevap

40

ggplot tarafından factor() veya dahili olarak dayattığı seviyelerinin varsayılan düzene güvenmeyin. Seviyeleri açıkça kendiniz ayarlayın.

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

Bu rastgele sırayla bunları isterlerse ne olur?

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

Bunu yapmak için, seviyelerini istediğiniz gibi ayarlayın. üretir

require(ggplot2) 
p <- ggplot(dat, aes(x = x)) + geom_bar() 
p + facet_wrap(~ 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)) 

Şimdi biz Talep sırayla çizilmiş panellere sahiptir için kullanabilir

facets wrapped

+1

Çok teşekkürler gavin :) – Jana

0

Sadece benzer bir çalışan olmanın sorun. İkinci seviye nedeniyle alfabetik sıraya yersiz olduğunu

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

Not olun: Ben varsayılan olarak şuna benzer seviyeleri var. daha sonra bu göre yeniden sıralar

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]) 

O "A01" ile "A1" gibi seviyelerini değiştirir:

Bu benim sırasını düzeltmek için yapıyorum budur. Bunu çok daha verimli bir şekilde yapabileceğinize eminim, ama iş yapıyor. Orijinal sorunu ele alacak şekilde uyarlanabilir.