J'essaie de visualiser deux variables discrètes dans barplot avec ggplot2 en utilisant respectivement fill
et alpha
. La méthode standard pour ce faire est la suivante:r ggplot2: légende de regroupement dans les graphiques à barres
#creating data and building the basic bar plot
library(ggplot2)
myleg<-read.csv(text="lett,num
a,1
a,2
b,1
b,2
h,1
h,2
h,3
h,4")
ggplot(myleg,aes(lett,alpha=factor(num),fill=lett)) +geom_bar(position=position_stack(reverse=T)) +scale_alpha_discrete(range=c(1,.1), name="alpha legend",labels=c("alpha lab 4","alpha lab 3","alpha lab 2", "alpha lab 1")) +labs(title="initial bar plot for data")
La légende par défaut sont groupés selon deux façons différentes de présentation (coloration pour lett et l'échelle de gris, ou d'opacité pour num).
Je dois avoir la légende groupée en tant que barres de données sur le tracé. c'est-à-dire trois bandes de couleur, chacune avec des niveaux alpha changeants. La solution partielle consiste à générer les parcelles avec trois désirées bandes de légende séparément comme suit:
ggplot(myleg,aes(lett,alpha=factor(num),fill=lett)) +geom_bar(position="stack",fill="#f8766d") +scale_alpha_discrete(name="red legend",labels=c("red lab 2","red lab 1"),breaks=c("3","4"))
ggplot(myleg,aes(lett,alpha=factor(num),fill=lett)) +geom_bar(position="stack",fill="#00ba38") +scale_alpha_discrete(name="green legend",labels=c("green lab 2","green lab 1"),breaks=c("3","4"))
ggplot(myleg,aes(lett,alpha=factor(num),fill=lett)) +geom_bar(position="stack",fill="#619cff") +scale_alpha_discrete(name="blue legend",labels=c("blue lab 4","blue lab 3","blue lab 2", "blue lab 1"))
Donc pour l'instant je ne peux couper et coller trois bandes de légende sur le graphique principal , par exemple, dans Inkscape, pour produire le résultat souhaité:
Comment il est possible de programmer de manière décente?
réponse Marco ci-dessous est le « droit » de le faire, mais pour les chiffres particulièrement fiddly, à un moment donné votre façon de le faire dans Inkscape est la façon meilleure et plus personnalisable. – Brian
J'ai édité ma réponse suggérant la solution pour le nouveau problème posté par @astrsk –