2015-12-11 15 views
8
dụ

Dữ liệu từ dBV:trật tự đảo ngược sau khi coord_flip trong R

gender Sektion 
1  m  5 
2  m  5 
3  w  3B 
4  w  3B 
5  w  3B 
6  m  4 

Tôi đã âm mưu sau:

Sekplot <- ggplot(dbv,aes(x=Sektion, 
          fill=factor(gender), 
          stat="bin", 
          label = paste(round((..count..)/sum(..count..)*100), "%"))) 
Sekplot <- Sekplot + geom_bar(position="fill") 
Sekplot <- Sekplot + scale_y_continuous(labels = percent) 
Sekplot <- Sekplot + labs(title = "test") 
Sekplot <- Sekplot + scale_fill_discrete(name="test", breaks=c("m", "w", "k.A."), labels=c("m", "w", "k.A.")) 
Sekplot <- Sekplot + geom_hline(aes(yintercept = ges, linetype = "test"), colour = "black", size = 0.75, show_guide = T) 
Sekplot <- last_plot() + coord_flip() 
Sekplot <- Sekplot + guides(colour = guide_legend(override.aes = list(linetype = 0)), 
            fill = guide_legend(override.aes = list(linetype = 0)), 
            shape = guide_legend(override.aes = list(linetype = 0)), 
            linetype = guide_legend()) + theme(legend.title=element_blank()) 

Sekplot 

Output:

Plot with y-axis in wrong order

Làm thế nào tôi có thể đảo ngược thứ tự của trục "Sektion"? Tôi muốn có một ở trên và 8 ở phía dưới.

tôi đã cố gắng, theo GroupA $ Ngày < - yếu tố (GroupA $ ngày, nồng độ = rev (unique (GroupA $ ngày))):

Sekplot <- last_plot() + coord_flip() + scale_x_reverse() 

trong một số hương vị, nhưng không thể tìm thấy đúng cách.

+0

Bạn cần một cái gì đó như 'scale_x_discrete (giới hạn = rev (cấp (dat $ Sektion)))' - xem [câu trả lời này] (http://stackoverflow.com/a/7310754/2461552) – aosmith

+0

Cảm ơn rất nhiều, nó hoạt động như một sự quyến rũ! Tôi không thể đánh dấu câu hỏi này là đã được giải quyết, bởi vì câu trả lời nằm trong nhận xét. –

+1

Tôi đã không đặt nó như là một câu trả lời bởi vì tôi đã cố gắng tìm bản sao. Tôi đã không tìm thấy một trận đấu thực sự tốt, mặc dù, do đó, sẽ thêm như là câu trả lời. – aosmith

Trả lời

12

Bạn có thể thêm scale_x_discrete với đối số limits để thực hiện việc này. Bạn có thể chỉ cần viết ra các giới hạn theo thứ tự bạn muốn, nhưng điều đó trở nên phức tạp khi bạn có nhiều cấp độ nhân tố. Thay vào đó, bạn có thể kéo các mức của yếu tố từ tập dữ liệu của mình và tận dụng lợi thế của rev để đặt chúng theo thứ tự ngược lại.

Nó sẽ giống như sau: scale_x_discrete(limits = rev(levels(dbv$Sektion)))