j'essaie de tracer ces données dans R -
column1 column2 column3
1-2 abc 10
1-2 def 15
1-2 ghi 20
2-3 abc 80
2-3 def 95
2-3 ghi 10
3-4 abc 30
3-4 def 55
3-4 ghi 80
l'axe x serait la colonne1 (donc 1-2, 2-3 et 3-4 serait présent en tant qu'axe x), et sur l'axe y, les valeurs de la colonne3 devraient être tracées pour chacun des éléments de la colonne2. Il s’agit donc essentiellement d’un diagramme à barres "groupé".
Je ne suis pas en mesure de tracer ce diagramme à barres groupée à l'aide de R. L'extrait de code que j'utilise est ci-dessous:
dataset <- fetch(rs,n=-1)
plot_var <- table(dataset$percentage, dataset$age)
barplot(plot_var, names.arg,
main="Title of Graph",
xlab="Column1", col=c("darkblue","red"),
legend = rownames(plot_var), beside=TRUE)
Comment puis-je obtenir ce graphique à barres groupées à afficher? Merci!
Votre problème semble résulter d'un mauvais formatage des données. Vous devez créer une matrice avec la structure de noms de lignes appropriée pour créer le tracé souhaité avec les graphiques de base. Voici votre solution:
#your data...
d <- data.frame(row.names=c("1-2","2-3","3-4"), abc = c(10,80, 30),
def = c(15, 95, 55), ghi = c(20, 10, 80))
#but you make a matrix out of it to create bar chart
d <- do.call(rbind, d)
#...and you are sorted
barplot(d, beside = TRUE, ylim=c(0,100), legend.text = rownames(d),
args.legend = list(x = "topleft", bty="n"))
Cependant, j’aime parfois utiliser lattice
pour ce type de tâche. Cette fois, vous n'avez même pas besoin de créer de matrice, vous devez simplement conserver votre data.frame
au format original:
d <- data.frame(column1=rep(c("1-2","2-3","3-4"), each=3),
column2=rep(c("abc", "def", "ghi"), 3),
column3=c(10, 15, 20, 80, 95, 10, 30, 55, 80))
require(lattice)
barchart(column3 ~ column1, groups=column2, d, auto.key = list(columns = 3))
J'aime utiliser ggplot2
pour ce genre de tâche.
#Make the data reproducible:
column1 <- c(rep("1-2", 3), rep("2-3", 3), rep("3-4", 3))
column2 <- gl(3, 1, 9, labels=c("abc", "def", "ghi"))
column3 <- c(10, 15, 20, 80, 95, 10, 30, 55, 80)
d <- data.frame(column1=column1, column2=column2, column3=column3)
require(ggplot2)
ggplot(d, aes(x=column1, y=column3, fill=column2)) + geom_bar(position=position_dodge())
La raison pour laquelle je trouve cela intuitif (après un peu de période d'apprentissage) est que vous avez clairement indiqué ce que vous voulez sur les axes x et y, et nous disons simplement cela à ggplot (ainsi que la variable définissant la couleur de "remplissage", et quel type de parcelle - ici, geom_bar
- à utiliser.
J'ai trouvé l'aide de la réponse de Drew Steen, mais le code ci-dessus ne fonctionnait pas pour moi, comme indiqué ci-dessus. J'ai ajouté stat = "identité" et cela fonctionne.
require(ggplot2)
ggplot(d, aes(x=column1, y=column3, fill=column2)) + geom_bar(stat="identity", position=position_dodge())
Merci Drew pour ta réponse.