2012-11-06 41 views
23

Questo codice crea una trama piacevole ma vorrei aggiungere una linea nera orizzontale a y = 50 E avere la legenda mostra una linea nera con il testo "taglio" nella legenda , ma lascia i punti nella legenda per le fonti. Posso aggiungere la linea con geom_line ma non posso ottenere la riga nella legenda.Aggiungi una linea orizzontale per tracciare e legenda in ggplot2

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

risposta

41

(1) Prova questo:

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) Per quanto riguarda il tuo commento, se non si desidera che il cutoff elencato come una leggenda separata che sarebbe stato più facile basta etichettare la linea di taglio a destra nella proprietà:

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

+0

Che dovrebbe funzionare, è possibile combinare le due leggende? – Greg

+0

Ho provato ad aggiungere il testo direttamente alla trama ma il font non ha un bell'aspetto rispetto al resto della trama quando compilato sulla mia macchina Linux. Userò le leggende separate per ora. Grazie – Greg

+1

Si noti che si può specificare 'fontface =' e 'family =' in 'geom_text'. Vedi gli esempi in fondo a '? Geom_text'. –

9

Un'altra soluzione:

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) 

Questo codice genera esattamente lo stesso grafico come quello di cui al punto (1) di @G. Grothendieck. Ma è più facile adattarsi alla grafica con diversi livelli.

+0

'show_guide' è stato deprecato, usare invece' show.legend'. – Zhanxiong

Problemi correlati