2013-07-18 24 views
25

gruplandırılmış yapmak için aşağıdaki dataframe vardır: Bir gruplandırılmış çubuk grafik yapmaya çalışıyorumkolay yoludur barplot

Catergory  Reason Species 
1 Decline  Genuine  24 
2 Improved  Genuine  16 
3 Improved Misclassified  85 
4 Decline Misclassified  41 
5 Decline  Taxonomic  2 
6 Improved  Taxonomic  7 
7 Decline  Unclear  41 
8 Improved  Unclear  117 

, yükseklik olarak türler ve catergory için daha sonra 2 renkler. ,

Reasonstats<-read.csv("bothstats.csv") 
Reasonstats2<-as.matrix(Reasonstats[,3]) 


barplot((Reasonstats2),beside=T,col=c("darkblue","red"),ylab="number of 
species",names.arg=Reasonstats$Reason, cex.names=0.8,las=2,space=c(0,100) 
,ylim=c(0,120)) 
box(bty="l") 

Şimdi ne istiyorum yok etmektir:

ben bende ne var bir görüntü post ediyorum, ama burada yeterince itibar puanı var ... ama yok benim kodudur İki çubuğu iki kez etiketlemek ve onları gruplandırmak için, boşluk değerini her türlü şeye değiştirmeyi denedim ve çubukları birbirinden ayırmaya benzemiyor. Bana yanlış yaptığımı söyleyen var mı?

cevap

27

Değil barplot çözüm ancak lattice ve barchart kullanarak:

library(lattice) 
barchart(Species~Reason,data=Reasonstats,groups=Catergory, 
     scales=list(x=list(rot=90,cex=0.8))) 

enter image description here

+1

burada ne renkler için efsane olacak? – maciek

14

Yapmam gereken beri, buradan yapmaya çalıştıkları şeyi yapmaya barplot() için bar() adında bir işlev sarmalayıcı yazdı benzer şeyler sık ​​sık. Işlevine Github bağlantısı here. kopyalama ve Ar yapıştırarak sonra,

bar(dv = Species, 
    factors = c(Category, Reason), 
    dataframe = Reasonstats, 
    errbar = FALSE, 
    ylim=c(0, 140)) #I increased the upper y-limit to accommodate the legend. 

bir kolaylık sizin kategorik değişkeni (örneğin, "Reddet" ve "Geliştirilmiş" düzeylerinin adlarını kullanarak arsa üzerinde bir efsane koyacağız ki do). , lattice bunlardan biridir; senin düzeylerinin her çoklu gözlemler varsa, o da dolayısıyla burada geçerli değildir hata çubukları (errbar=FALSE

Ar araziler yapmak için çeşitli yollar vardır

enter image description here

+2

+1, bu tamamen bir sarmalayıcı! – gung

+0

İlginç.Teşekkürler – zsoh

+0

Sarıcı kullanırken hata çubukları için kullanılacak sütunu nerede tanımlarım? Teşekkürler – heysamhey

19

çizebilirsiniz ve her zaman makul bir çözüm, 1 @agstudy sizin baz grafik bunu yapmak istiyorsanız, şunu deneyebilirsiniz:.

Reasonstats <- read.table(text="  Category  Reason Species 
    Decline  Genuine  24 
    Improved  Genuine  16 
    Improved Misclassified  85 
    Decline Misclassified  41 
    Decline  Taxonomic  2 
    Improved  Taxonomic  7 
    Decline  Unclear  41 
    Improved  Unclear  117", header=T) 

ReasonstatsDec <- Reasonstats[which(Reasonstats$Category=="Decline"),] 
ReasonstatsImp <- Reasonstats[which(Reasonstats$Category=="Improved"),] 
Reasonstats3 <- cbind(ReasonstatsImp[,3], ReasonstatsDec[,3]) 
colnames(Reasonstats3) <- c("Improved", "Decline") 
rownames(Reasonstats3) <- ReasonstatsImp$Reason 

windows() 
    barplot(t(Reasonstats3), beside=T, ylab="number of species", 
      cex.names=0.8, las=2, ylim=c(0,120), col=c("darkblue","red")) 
    box(bty="l") 
İşte

enter image description here

ne yaptım: Ben sütunlar türlerin Decline ve Improved için saydığı iki sütunlu bir matris oluşturdu (verileriniz sütunlarda olduğu için). Sonra bu kategorileri sütun isimlerini yaptım. Ayrıca Reason s satır adlarını da yaptım. barplot() işlevi bu matris üzerinde çalışabilir, ancak sütunlar yerine satır satırları istiyor, bu nedenle matrisin transposed sürümünü besledim. Son olarak, bazı argümanlarınızı artık gerekmeyen barplot() işlev çağrınıza sildim. Başka bir deyişle, sorun, verilerinizin, istediğiniz çıktı içinbarplot()istediği şekilde ayarlanmamış olmasıdır. ggplot2 ile

+0

Teşekkürler. Temel grafiğin kullanılmasının bir avantajı, par() veya layout() işlevini kullanarak birkaç temel çizim yapabilmenizdir. – giordano

31

:

library(ggplot2) 
Animals <- read.table(
    header=TRUE, text='Category  Reason Species 
1 Decline  Genuine  24 
2 Improved  Genuine  16 
3 Improved Misclassified  85 
4 Decline Misclassified  41 
5 Decline  Taxonomic  2 
6 Improved  Taxonomic  7 
7 Decline  Unclear  41 
8 Improved  Unclear  117') 

ggplot(Animals, aes(factor(Reason), Species, fill = Category)) + 
    geom_bar(stat="identity", position = "dodge") + 
    scale_fill_brewer(palette = "Set1") 

Bar Chart

+0

Çok yararlı, teşekkürler! – ganeshran

+0

@Jack Ryan Shoul bu 'ggplot (Hayvanlar, aes (faktör (Neden), Türler' veya 'ggplot (Hayvanlar, aes (faktör (Neden), as.factor (Türler)'? Çünkü benim durumumda veri nefret ediyorum Aynı formatta olduğu gibi bir grup çubuğu yerine bir yığın çubuk oluşturdu. – RKR