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

12,942

Solution 1

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 !!!

Solution 2

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.

Share:
12,942
jbryer
Author by

jbryer

Doctoral candidate in Educational Psychology and Methodology at the University at Albany. Senior Research Associate at Excelsior College. An avid R user. See my website at www.bryer.org or photography at www.jasonbryer.com.

Updated on June 23, 2022

Comments

  • jbryer
    jbryer almost 2 years

    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