2011-09-26 12 views
8

Bu konuya ggplot2'de devam ediyorum, belki birisi bana yardımcı olabilir.Çizimdeki puan sırasını değiştirmeden yeniden düzenleyin

Efsanedeki değişkenlerin sırasının, arsada nasıl gösterildiğine göre ters sırada olduğu bir çizimim var. Örneğin

:

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

üretir:

example

Yani noktası Cat2 = Z, Y, X (siyah elmas, mavi üçgen kırmızı Grafik üzerindeki gösterildi daire) ama efsanede onlar Cat2 = X, Y, sonra Z (kırmızı daire, mavi üçgen, siyah elmas) olarak görüntülenir.

Efsanenin sırasını, arsa üzerindeki noktaları değiştirmeden nasıl tersine çevirebilirim? Faktörün yeniden düzenlenmesi zıt problemi yaratır (arsa üzerindeki noktalar tersine çevrilir).

Teşekkürler!

+2

Şimdilik, muhtemelen kolay bir yol yoktur. Bir sonraki sürümde, efsane sırasını tersine çevirmek için bir seçenek olabilir. – kohske

+0

Hmm, bu kokuyor. Bilmek güzel. Başların için teşekkürler! – jslefche

+1

"Sonek" ölçeğini ayarlayın. – hadley

cevap

0

Bildiğim kadarıyla ben ulaşmak istediğiniz anlamak gibi bu basit manipülasyon benim için hile yapar:

  1. ve
  2. chage (yeterli sırayla düzeyleriyle) bir faktör olarak cat2 tanımlamak

    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() 
    
    : (scale_manual komutlar olarak) düzeyleri sıra ile aynı renk ve şekillerin düzeni İşte

bunu yapmak için koddur

+0

Maalesef, sorumun sonunda gömdüğüm gibi, faktörü tersine çevirmek lejantı tersine çevirir, aynı zamanda arsa üzerindeki noktaları da tersine çevirir (kırmızı daire şimdi ilk sıradadır). Arsadaki noktaların sırasını korumak istiyorum ama efsaneyi tersine çevirmek istiyorum. Çözümü kullandım ve sadece efsaneyi ilk komploya kopyaladım. Inelegant, ama yapması gerekecek. Tüm içgörü için teşekkürler! – jslefche

3

Hadley'in yorumunu eti dışarı için, böyle bir şey yapmak istiyorum: Biz hem ölçeklerde sonları ayarlamak zorunda

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

Not. Eğer bir tane yapsaydık, eşleşmezlerdi ve ggplot onları birleştirmekten ziyade iki efsaneye bölerdi.

+0

Çeşitli manuel ölçekleriniz varsa, ör. "scale_fill_manual", "scale_color_manual" ve "scale_shape_manual" ve etiketleri değiştirmek isterseniz, hepsine aynı etiketleri sağlamanız gerekir, bu da sıkıcı olabilir (6 uzun açıklayıcı etiketle 6 değişkeniniz var). Başka yolu yok değil mi? – PatrickT

İlgili konular