Adicione uma linha horizontal para plotar e legendar em ggplot2

Este código cria uma boa plotagem, mas eu gostaria de adicionar uma linha preta horizontal em y = 50 E fazer a legenda mostrar uma linha preta com o texto “cutoff” na legenda, mas deixar pontos na legenda das fonts. Eu posso adicionar a linha com geom_line mas não consigo obter a linha na legenda.

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

(1) Tente isto:

 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) 

captura de tela

(2) Quanto ao seu comentário, se você não quiser que o corte listado como uma legenda separada, seria mais fácil apenas rotular a linha de corte no gráfico:

 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") 

captura de tela

Outra solução

 gg <- ggplot(the.data, aes( x = year, y = value ) ) + geom_point(aes(colour = source)) + geom_smooth(aes(group = 1)) cutoff <- data.frame(yintercept=50, cutoff=factor(50)) gg + geom_hline(aes(yintercept=yintercept, linetype=cutoff), data=cutoff, show_guide=TRUE) 

Este código gera exatamente o mesmo gráfico que aquele no ponto (1) de @G. Grothendieck. Mas é mais fácil se adaptar a charts com várias camadas.