Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add a horizontal line to plot and legend in ggplot2

Tags:

r

ggplot2

This code creates a nice plot but I would like to add a horizontal black line at y=50 AND have the legend show a black line with the text "cutoff" in the legend, but leave points in the legend for the sources. I can add the line with geom_line but cannot get the line in the legend.

    library(ggplot2)     the.data <- read.table( header=TRUE, sep=",",      text="source,year,value     S1,1976,56.98     S1,1977,55.26     S1,1978,68.83     S1,1979,59.70     S1,1980,57.58     S1,1981,61.54     S1,1982,48.65     S1,1983,53.45     S1,1984,45.95     S1,1985,51.95     S1,1986,51.85     S1,1987,54.55     S1,1988,51.61     S1,1989,52.24     S1,1990,49.28     S1,1991,57.33     S1,1992,51.28     S1,1993,55.07     S1,1994,50.88     S2,1993,54.90     S2,1994,51.20     S2,1995,52.10     S2,1996,51.40     S3,2002,57.95     S3,2003,47.95     S3,2004,48.15     S3,2005,37.80     S3,2006,56.96     S3,2007,48.91     S3,2008,44.00     S3,2009,45.35     S3,2010,49.40     S3,2011,51.19")      ggplot(the.data, aes( x = year, y = value ) ) +          geom_point(aes(colour = source)) +          geom_smooth(aes(group = 1)) 
like image 660
Greg Avatar asked Nov 06 '12 15:11

Greg


People also ask

How do I add a horizontal line in ggplot2?

Example: To add the horizontal line on the plot, we simply add geom_hline() function to ggplot2() function and pass the yintercept, which basically has a location on the Y axis, where we actually want to create a vertical line.

How do I add a line in ggplot2?

To create a vertical line using ggplot2, we can use geom_vline function of ggplot2 package and if we want to have a wide vertical line with different color then lwd and colour argument will be used. The lwd argument will increase the width of the line and obviously colour argument will change the color.

How do I insert a horizontal line in R?

Adding Straight Lines to a Plot in R Programming – abline() Function. abline() function in R Language is used to add one or more straight lines to a graph. The abline() function can be used to add vertical, horizontal or regression lines to plot.

How do you add a line to a plot in R?

Use the lines() Function to Add a Line to a Plot in R Once the plot is drawn, we can call the lines() function and pass the coordinate vectors as needed to add lines to the plot.


1 Answers

(1) Try this:

cutoff <- data.frame( x = c(-Inf, Inf), y = 50, cutoff = factor(50) ) ggplot(the.data, aes( year, value ) ) +          geom_point(aes( colour = source )) +          geom_smooth(aes( group = 1 )) +          geom_line(aes( x, y, linetype = cutoff ), cutoff) 

screenshot

(2) Regarding your comment, if you don't want the cutoff listed as a separate legend it would be easier to just label the cutoff line right on the plot:

ggplot(the.data, aes( year, value ) ) +      geom_point(aes( colour = source )) +      geom_smooth(aes( group = 1 )) +      geom_hline(yintercept = 50) +      annotate("text", min(the.data$year), 50, vjust = -1, label = "Cutoff") 

screenshot

Update

This seems even better and generalizes to mulitple lines as shown:

line.data <- data.frame(yintercept = c(50, 60), Lines = c("lower", "upper")) ggplot(the.data, aes( year, value ) ) +          geom_point(aes( colour = source )) +          geom_smooth(aes( group = 1 )) +          geom_hline(aes(yintercept = yintercept, linetype = Lines), line.data) 
like image 188
G. Grothendieck Avatar answered Sep 29 '22 21:09

G. Grothendieck