2011-09-26 39 views
8

Tôi tiếp tục gặp vấn đề này trong ggplot2, có lẽ ai đó có thể giúp tôi.Sắp xếp lại chú thích mà không thay đổi thứ tự các điểm trên lô

Tôi có một âm mưu mà thứ tự của các biến trong chú giải theo thứ tự ngược với cách chúng được hiển thị trên cốt truyện.

Ví dụ:

df=data.frame(
mean=runif(9,2,3), 
Cat1=rep(c("A","B","C"),3), 
Cat2=rep(c("X","Y","Z"),each=3)) 

dodge=position_dodge(width=1) 
ggplot(df,aes(x=Cat1,y=mean,color=Cat2))+ 
geom_point(aes(shape=Cat2),size=4,position=dodge)+ 
scale_color_manual(values=c("red","blue","black"))+ 
scale_shape_manual(values=c(16:19))+ 
coord_flip() 

sản xuất:

example

Vì vậy, các điểm được hiển thị trên cốt truyện như Cat2 = Z, Y, sau đó X (kim cương đen, hình tam giác màu xanh, đỏ vòng tròn) nhưng trong chú giải chúng được hiển thị dưới dạng Cat2 = X, Y, rồi Z (vòng tròn màu đỏ, hình tam giác màu xanh, kim cương đen).

Làm cách nào để đảo ngược thứ tự của chú giải mà không phải dịch chuyển các điểm trên ô? Sắp xếp lại các yếu tố tạo ra vấn đề ngược lại (điểm trên cốt truyện được đảo ngược).

Cảm ơn!

+2

Hiện tại, có thể không có cách nào dễ dàng. Phiên bản tiếp theo có thể có một tùy chọn để đảo ngược thứ tự chú giải. – kohske

+0

Hmm, có mùi hôi thối. Tốt để biết. Cảm ơn cho những người đứng đầu lên! – jslefche

+1

Đặt tỷ lệ 'ngắt'. – hadley

Trả lời

0

Theo như tôi hiểu những gì bạn muốn đạt được, thao tác đơn giản này hiện các trick cho tôi:

  1. định nghĩa một Cat2 như một nhân tố (với các mức theo thứ tự đầy đủ) và
  2. chage thứ tự của màu sắc và hình dạng để phù hợp với trình tự cấp (trong các lệnh scale_manual)

đây là đoạn mã để làm điều đó:

library(ggplot2) 

df=data.frame(
    mean=runif(9,2,3), 
    Cat1=rep(c("A","B","C"),3), 
    Cat2=factor(rep(c("X","Y","Z"),each=3), levels=c('Z', 'Y', 'X'))) 

dodge=position_dodge(width=1) 
ggplot(df,aes(x=Cat1,y=mean,color=Cat2))+ 
    geom_point(aes(shape=Cat2),size=4,position=dodge)+ 
    scale_color_manual(values=c("black","blue","red"))+ 
    scale_shape_manual(values=c(18:16))+ 
    coord_flip() 
+0

Than ôi, khi tôi chôn vào cuối câu hỏi của tôi, đảo ngược yếu tố đảo ngược truyền thuyết nhưng cũng đảo ngược các điểm trên cốt truyện (vòng tròn màu đỏ bây giờ là đầu tiên). Tôi muốn bảo vệ thứ tự các điểm trên cốt truyện nhưng đảo ngược truyền thuyết. Tôi đã sử dụng giải pháp của bạn và chỉ sao chép truyền thuyết vào cốt truyện đầu tiên. Không thích hợp, nhưng nó sẽ phải làm. Cảm ơn vì cái nhìn sâu sắc tất cả như nhau! – jslefche

3

Để xác thịt comment Hadley, chúng tôi sẽ làm một cái gì đó như thế này:

ggplot(df,aes(x=Cat1,y=mean,color=Cat2))+ 
geom_point(aes(shape=Cat2),size=4,position=dodge)+ 
scale_color_manual(values=c("red","blue","black"),breaks = c('Z','Y','X'))+ 
scale_shape_manual(values=c(16:19),breaks = c('Z','Y','X'))+ 
coord_flip() 

enter image description here

Lưu ý rằng chúng tôi phải thiết lập các đứt gãy trong cả vảy. Nếu chúng tôi chỉ làm một, họ sẽ không phù hợp, và ggplot sẽ chia chúng thành hai huyền thoại, thay vì hợp nhất chúng.

+0

Nếu bạn có nhiều quy mô thủ công, ví dụ: 'scale_fill_manual',' scale_color_manual' và 'scale_shape_manual' và bạn muốn thay đổi nhãn, bạn cần phải cung cấp các nhãn giống nhau cho tất cả các nhãn, có thể tẻ nhạt (giả sử bạn có 6 biến với 6 nhãn giải thích dài). Không có cách nào khác, phải không? – PatrickT

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