2011-03-30 32 views
32

Hi Tôi vẽ một âm mưu khía cạnh sử dụng ggplot trong R và đây là cốt truyệnLàm thế nào để thay đổi thứ tự của nhãn khía cạnh trong ggplot (tùy chỉnh khía cạnh nhãn bọc)

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

Tôi có vấn đề là, The các khía cạnh (nhãn) được sắp xếp theo thứ tự bảng chữ cái (Ví dụ: E1, E10, E11, E13, E2, E3, I1, I10, I2) nhưng tôi cần chúng theo thứ tự tùy chỉnh như E1, I1, E2, I2, E3, E10, I10, E11, E13.

Tôi có thể làm như thế nào?

+5

Sắp xếp lại thứ tự của yếu tố cơ bản. Bạn có thể sử dụng 'relevel()' hoặc 'reorder()' hoặc tạo một thứ tự tùy chỉnh và sử dụng 'factor()'. – Chase

Trả lời

40

Không dựa vào thứ tự mặc định của các mức được áp đặt bởi factor() hoặc nội bộ theo ggplot nếu biến nhóm bạn cung cấp là không phải là một yếu tố. Đặt mức độ một cách rõ ràng cho mình.

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

Nếu tôi muốn chúng theo thứ tự tùy ý này thì sao?

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

Để thực hiện việc này, hãy đặt mức độ theo cách bạn muốn.

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

Bây giờ chúng ta có thể sử dụng để có tấm vẽ theo thứ tự chúng tôi muốn:

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

nào sản xuất:

facets wrapped

+1

Cảm ơn rất nhiều gavin :) – Jana

0

Chỉ cần được làm việc trên một tương tự vấn đề. Tôi có các cấp trông giống như thế này theo mặc định:

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

Lưu ý rằng mức thứ hai không đúng chỗ do thứ tự chữ cái.

Đây là những gì tôi đang làm để sửa chữa theo thứ tự:

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

Nó thay thế các mức như "A1" với "A01", sau đó sắp xếp lại theo này. Tôi chắc chắn rằng bạn có thể làm điều này hiệu quả hơn rất nhiều, nhưng nó thực hiện công việc.

Nó có thể được điều chỉnh để giải quyết vấn đề ban đầu.

Các vấn đề liên quan