2010-06-09 4 views
12

je les données suivantes:bar groupé graphique

bin groupname total_dist 
0 rowA 377 
0 rowA 306.6 
0 rowB 2.1 
0 rowB 110.6 
1 rowA 918.1 
1 rowA 463.2 
1 rowB 798.2 
1 rowB 1196 
2 rowA 1295.1 
2 rowA 1269.1 
2 rowB 698 
2 rowB 1022.1 

En utilisant R, je veux faire un graphique à barres où il y a un bar pour ligneA et un bar pour ligneB pour chaque bac. Je peux grouper total_dist par l'un ou l'autre (plot(total_dist~bin) ou plot(total_dist~groupname)). Mais je ne peux pas comprendre comment les combiner.

Je veux quelque chose qui ressemble à cet exemple: example grouped bar graph

+0

pourriez-vous mieux préciser? dans l'exemple du graphique inférieur, EUL, PES, EFA ... sont les bacs? l'exemple a 2 barres par groupe ... "deux barres" correspond à rowA/rowB, groupes à? nous avons deux valeurs par rowX, donc nous avons 4 valeurs pour bin, donc nous devrions avoir 4 barres par "groupe"? (au lieu de 2 de l'exemple ..) ?? S'il vous plaît pouvez-vous dessiner comment vous le voulez vraiment? – ShinTakezou

+0

avez-vous pour "grouper" les doubles (rowA rowA, rowB rowB) dans une seule valeur de sorte que vous avez 2 barres par bin au lieu de 4? et comment «combinez-vous» total_dist dans le même groupe et avec le même nom de groupe (sum? mean?) – ShinTakezou

+0

@ShinTakezou: Si mes données ont été mappées sur l'exemple, bin => group et groupname => year. Donc, bin serait les étiquettes de l'axe des x et le nom de groupe correspondrait à la coloration de la colonne. – dnagirl

Répondre

28

Voici une solution classique. (Supposant votre dataframe est nommé df)

data <- tapply(df$total_dist, list(df$groupname,df$bin), sum) 

barplot(data,beside=T,col=c("#ee7700","#3333ff") 
,main="European Parliament Elections",xlab="Group",ylab="Seats") 

legend(locator(1),rownames(data),fill=c("#ee7700","#3333ff")) 

et voici la solution en utilisant ggplot2

library(ggplot2) 
qplot(factor(bin),data=df,geom="bar",fill=groupname,weight=total_dist,position="dodge", 
main = "European Parliament Elections", xlab="Group",ylab="Seats") 

alt text

+0

merci beaucoup! – dnagirl

+1

cool utilisation du localisateur – John