Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add a vertical line with ggplot when x-axis is a factor

Tags:

r

ggplot2

The following code use to work pre-version .9 of ggplot2. Is this not possible anymore?

df = data.frame(x = letters[1:26], y=abs(rnorm(26)))
ggplot(df, aes(x=x, y=y)) + geom_bar() + geom_vline(xintercept='m')

I get the following error:

Error in get(as.character(FUN), mode = "function", envir = envir) : object 'm' of mode 'function' was not found

like image 663
jbryer Avatar asked Apr 19 '12 21:04

jbryer


2 Answers

This answer is kind of a more broader discussion for people who wants to add vertical line in customized position in categorized x-axis.

I have five groups and five factors in each group. I want to add 4 vertical lines behind the last factor in each group to separate the five groups (at the 'E' position in this case). The method from @dickoa is not working for my case. when I use :

geom_vline(xintercept=which(df$x == 'm'))

It only adds vertical line at 'm' of the 3rd group. I just find that I can try sth like this:

geom_vline(xintercept = c(1.5,2.5,3.5,4.5))

At least this works perfect for my case. You may need to try several times to find the pattern fitting your case.

I always want to know how to add vertical/ horizontal line based on the proportion of x/y axis. e.g., xintercept = 0.5 means add vertical line in the middle of x-axis, and xintercept = 0.25 means first quarter. However I can't find any knowledge about this topic.

like image 158
maizer Avatar answered Sep 20 '22 23:09

maizer


I don't know (don't remember) if your original used to work with old version of ggplot but you can use an another approach like this one :

ggplot(df, aes(x=x, y=y)) + geom_bar() + geom_vline(xintercept=which(df$x == 'm'))

Hope this help !!!

like image 41
dickoa Avatar answered Sep 22 '22 23:09

dickoa