2012-11-06 3 views
23

Dieser Code erstellt ein nettes Diagramm, aber ich möchte eine horizontale schwarze Linie bei y = 50 hinzufügen und die Legende eine schwarze Linie mit dem Text "cutoff" in der Legende zeigen , aber lassen Sie Punkte in der Legende für die Quellen. Ich kann die Zeile mit geom_line hinzufügen, aber die Zeile in der Legende nicht erhalten.Fügen Sie eine horizontale Linie zu Plot und Legende in ggplot2 hinzu

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

Antwort

41

(1) Versuchen Sie folgendes:

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) In Bezug auf Ihren Kommentar, wenn Sie nicht wollen, die Cutoff als separate Legende aufgelistet es einfacher wäre, beschriften nur die Grenzlinie direkt auf dem Grundstück:

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

Das sollte funktionieren, ist es möglich, die beiden Legenden zu kombinieren? – Greg

+0

Ich habe versucht, den Text direkt auf dem Plot hinzuzufügen, aber die Schriftart sah nicht gut aus, verglichen mit dem Rest der Handlung, wenn sie auf meiner Linux-Maschine kompiliert wurde. Ich werde die separaten Legenden für jetzt verwenden. Danke – Greg

+1

Beachten Sie, dass man 'fontface =' und 'family =' in 'geom_text' angeben kann. Siehe die Beispiele unten in "? Geom_text". –

9

andere Lösung:

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) 

Dieser Code erzeugt exakt die gleiche Grafik wie die in Punkt (1) von @G. Grothendieck. Es ist jedoch einfacher, Grafiken mit mehreren Ebenen anzupassen.

+0

'show_guide' wurde veraltet, stattdessen' show.legend' verwenden. – Zhanxiong

Verwandte Themen