J'ai un ensemble de données comme ceci:
cars trucks suvs
1 2 4
3 5 4
6 4 6
4 5 6
9 12 16
J'essaie de dessiner un graphique à barres pour ces données. Actuellement, je peux le faire avec barplot
:
barplot(as.matrix(autos_data), main="Autos",
ylab= "Total",beside=TRUE, col=Rainbow(5))
Générer ce graphique:
Mes questions sont donc les suivantes: Puis-je utiliser ggplot2 pour dessiner un tel graphique? Plus précisément - comment utiliser faceting ou d'autres options pour scinder le graphique en jours de la semaine? Si oui, comment puis-je accomplir cela? De plus, comment utiliser facet pour produire une mise en page différente?
Cela a été demandé à plusieurs reprises auparavant. La réponse est que vous devez utiliser stat="identity"
dans geom_bar
pour dire à ggplot de ne pas résumer vos données.
dat <- read.table(text="
cars trucks suvs
1 2 4
3 5 4
6 4 6
4 5 6
9 12 16", header=TRUE, as.is=TRUE)
dat$day <- factor(c("Mo", "Tu", "We", "Th", "Fr"),
levels=c("Mo", "Tu", "We", "Th", "Fr"))
library(reshape2)
library(ggplot2)
mdat <- melt(dat, id.vars="day")
head(mdat)
ggplot(mdat, aes(variable, value, fill=day)) +
geom_bar(stat="identity", position="dodge")
Voici avec tidyr
:
Le plus gros problème ici est que vous devez convertir vos données dans un format ordonné. Je recommande fortement de lire R pour Data Science ( http://r4ds.had.co.nz/ ) pour que vous soyez prêt à utiliser des données ordonnées et ggplot.
En règle générale, une bonne règle est que si vous devez entrer plusieurs instances du même géom, il existe probablement une solution dans le format de vos données qui vous permettrait de tout mettre dans la fonction aes()
au sein du niveau supérieur ggplot()
. Dans ce cas, vous devez utiliser la gather()
pour organiser vos données de manière appropriée.
library(tidyverse)
# I had some trouble recreating your data, so I just did it myself here
data <- tibble(type = letters[1:9],
repeat_1 = abs(rnorm(9)), repeat_2
=abs(rnorm(9)),
repeat_3 = abs(rnorm(9)))
data_gathered <- data %>%
gather(repeat_number, value, 2:4)
ggplot(data_gathered, aes(x = type, y = value, fill = repeat_number)) +
geom_col(position = "dodge")