Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
722 views
in Technique[技术] by (71.8m points)

r - How to label a barplot bar with positive and negative bars with ggplot2

I'm trying to plot a labeled barplot with ggplot2 with positive and negative bars. That works so far, but I would like to set the label outside of the bar, so that it is above or under the bar. I tried to set an adjustment in vjust = c(x1,...,xn) where x is a positive or negative value according to the value of the bar in geom_text(). This doesn't work. I just got the Error message Error: "When setting aesthetics, they may only take one value. Problems: vjust"

With the normal plot command that works. I want to replicate this command in ggplot2:

xpos <- barplot(d, col=mycols, main='Verteilung in Dresden 2004',
         ylab='Anteil in %', xlab='Milieu', names.arg=l, 
         cex.axis=0.7, cex.names=0.7, ylim=c(0,max(d)+0.05))
boxed.labels(xpos,d+0.02,sprintf('%d%s', d*100, '%'),
          bg='transparent', border=FALSE, cex=0.7)

So that it looks like this just in nice... ;-)

Does someone have any suggestions?

Thank's for y'all help.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This does the trick

library(plyr)
library(ggplot2)
library(scales)
dtf <- data.frame(x = c("ETB", "PMA", "PER", "KON", "TRA", 
                  "DDR", "BUM", "MAT", "HED", "EXP"),
                  y = c(.02, .11, -.01, -.03, -.03, .02, .1, -.01, -.02, 0.06))
ggplot(dtf, aes(x, y)) +
  geom_bar(stat = "identity", aes(fill = x), legend = FALSE) + 
  geom_text(aes(label = paste(y * 100, "%"),
               vjust = ifelse(y >= 0, 0, 1))) +
  scale_y_continuous("Anteil in Prozent", labels = percent_format()) +
  opts(axis.title.x = theme_blank())

enter image description here


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...