J'aimerais que certaines étiquettes soient empilées sur un graphique geom_bar
. Voici un exemple:
df <- data.frame(x=factor(c(TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE)))
ggplot(df) + geom_bar(aes(x,fill=x)) + opts(axis.text.x=theme_blank(),axis.ticks=theme_blank(),axis.title.x=theme_blank(),legend.title=theme_blank(),axis.title.y=theme_blank())
À présent
table (df $ x)
FALSE TRUE
3 5
J'aimerais avoir les 3 et 5 au-dessus des deux barres. Encore mieux si je pouvais aussi avoir les valeurs de pourcentage. Par exemple. 3 (37.5%)
et 5 (62.5%)
. Ainsi:
(source: skitch.com )
Est-ce possible? Si c'est le cas, comment?
Comme pour de nombreuses tâches dans ggplot, la stratégie générale consiste à insérer dans un bloc de données ce que vous souhaitez ajouter à l'intrigue de manière à ce que les variables correspondent aux variables et à l'esthétique de votre intrigue. Ainsi, par exemple, vous créeriez un nouveau cadre de données comme ceci:
dfTab <- as.data.frame(table(df))
colnames(dfTab)[1] <- "x"
dfTab$lab <- as.character(100 * dfTab$Freq / sum(dfTab$Freq))
Ainsi, la variable x
correspond à la variable correspondante dans df
, etc. Ensuite, vous l'incluez simplement avec geom_text
:
ggplot(df) + geom_bar(aes(x,fill=x)) +
geom_text(data=dfTab,aes(x=x,y=Freq,label=lab),vjust=0) +
opts(axis.text.x=theme_blank(),axis.ticks=theme_blank(),
axis.title.x=theme_blank(),legend.title=theme_blank(),
axis.title.y=theme_blank())
Cet exemple ne présentera que les pourcentages, mais vous pouvez également paste
ainsi que les comptes via quelque chose comme ceci:
dfTab$lab <- paste(dfTab$Freq,paste("(",dfTab$lab,"%)",sep=""),sep=" ")
Notez que dans la version actuelle de ggplot2, opts
est obsolète. Nous utiliserions donc theme
et element_blank
à présent.
Pour tracer du texte sur un ggplot
, vous utilisez le geom_text
. Mais je trouve utile de résumer les données d’abord en utilisant ddply
dfl <- ddply(df, .(x), summarize, y=length(x))
str(dfl)
Puisque les données sont pré-résumées, vous devez vous rappeler de changer, ajoutez le stat="identity"
paramètre sur geom_bar
:
ggplot(dfl, aes(x, y=y, fill=x)) + geom_bar(stat="identity") +
geom_text(aes(label=y), vjust=0) +
opts(axis.text.x=theme_blank(),
axis.ticks=theme_blank(),
axis.title.x=theme_blank(),
legend.title=theme_blank(),
axis.title.y=theme_blank()
)