I'm trying to make a bar graph (with geom_bar) of ratios, and would like to set the x-axis at y=1. Therefore, ratios <1 would be below the axis and ratios >1 would be above the axis. I can do something similar with geom_point:
ggplot(data, aes(x=ratio, y=reorder(place,ratio)))+geom_point()+geom_vline(xintercept=1.0)+coord_flip()
However geom_bar would be much preferred... Ideally the graph would look something like this: http://i.stack.imgur.com/isdnw.png, except the "negative" bars would be ratios <1.
Thanks so much for your help!
C
You can shift the geom_bar
baseline to 1 (instead of zero) as follows:
Shift the data by -1, so that ratio=1
becomes zero and is therefore used as the baseline.
Add 1 to the y-axis labels so that they reflect the actual data values.
dat = data.frame(ratio=-4:11/3, x=1:16)
ggplot(dat, aes(x, ratio-1, fill=ifelse(ratio-1>0,"GT1","LT1"))) +
geom_bar(stat="identity") +
scale_fill_manual(values=c("blue","red"), name="LT or GT 1") +
scale_y_continuous(breaks=-3:3, labels=-3:3 + 1)
A second approach to consider is to use geom_segment
. This allows you to keep the 'original' y-axis.
set.seed(123)
dat <- data.frame(x=1:10, ratio=sort(runif(10,0,2)))
#create flag
dat$col_flag <- dat$ratio > 1
ggplot(dat, aes(color=col_flag)) +
geom_segment(aes(x=x,xend=x,y=1, yend=ratio), size=15)