R histogramme empilé tracé geom_text
Je suis en train de tracer un histogramme empilé dans R à l'aide de ggplot. Je tiens également à inclure pourcentage dans chaque pièce de bars pour cette pièce. J'ai essayé de suivre les posts Un, Deux, Trois mais les valeurs ne sont pas exactement dans leurs blocs respectifs. Mes données est un fichier dans dropbox.
Mon code est comme suit:
f<-read.table("Input.txt", sep="\t", header=TRUE)
ggplot(data=f, aes(x=Form, y=Percentage, fill=Position)) +
geom_bar(stat="identity", colour="black") +
geom_text(position="stack", aes(x=Form, y=Percentage, ymax=Percentage, label=Percentage, hjust=0.5)) +
facet_grid(Sample_name ~ Sample_type, scales="free", space="free") +
opts(title = "Input_profile",
axis.text.x = theme_text(angle = 90, hjust = 1, size = 8, colour = "grey50"),
plot.title = theme_text(face="bold", size=11),
axis.title.x = theme_text(face="bold", size=9),
axis.title.y = theme_text(face="bold", size=9, angle=90),
panel.grid.major = theme_blank(),
panel.grid.minor = theme_blank()) +
scale_fill_hue(c=45, l=80)
ggsave("Output.pdf")
La sortie est-
Toute aide est grandement appréciée.
Je vous remercie pour votre aide et le temps!
Pensez-y la valeur que vous donnez à
Quelque chose comme ceci permettra de calculer les positions y pour les étiquettes au milieu de chaque barre de segment:
geom_text
. C'est la hauteur de chaque barre segment. Vous devez faire de l'arithmétique pour calculer la médiane (ou en haut, ou quoi que ce soit) de chaque barre segment, ajoutez-le comme une variable distincte et l'utiliser comme la variable y dans geom_text
. La fonction cumsum
peut être utile.Quelque chose comme ceci permettra de calculer les positions y pour les étiquettes au milieu de chaque barre de segment:
f <- ddply(f, .(Form, Sample_name, Sample_type), transform, pos = (cumsum(Percentage) - 0.5 * Percentage))
(nécessite plyr), puis le geom_text
déclaration doit être: geom_text(aes(x=Form, y=pos, label=Percentage))
OriginalL'auteur smandape | 2013-02-18
Vous devez vous connecter pour publier un commentaire.
Je pense que vous utilisez une ancienne version de
ggplot2
. Parce qu'avec ton code modifié pour ggplot2 v 0.9.3, j'obtiens ceci:Vous voyez que les objets de texte sont normalement placés correctement. Il y a des endroits où les bars sont juste trop court pour que les nombres se chevauchent. Vous pouvez aussi jouer avec les
size
paramètre.Pour remédier à cela, vous pourriez faire quelque chose comme cela pour additionner les nombres par vous-même.
Cela donne:
OriginalL'auteur Arun
Ici une solution à l'aide de
barchart
de treillis.OriginalL'auteur agstudy