在ggplot2中为绘图和图例添加水平线

Gre*_*reg 36 r ggplot2

这段代码创建了一个很好的情节,但是我想在y = 50处添加一条水平黑线,并且图例中的图例显示带有文本"cutoff"的黑线,​​但是在图例中留下了点的来源.我可以使用geom_line添加该行,但无法获取图例中的行.

    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))
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 62

(1)试试这个:

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)
Run Code Online (Sandbox Code Playgroud)

截图

(2)关于你的评论,如果你不希望将截止值列为单独的图例,那么在图上标记截止线会更容易:

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")
Run Code Online (Sandbox Code Playgroud)

截图


Sté*_*ent 14

另一种方案:

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) 
Run Code Online (Sandbox Code Playgroud)

此代码生成与@G的第(1)点中的图形完全相同的图形.格罗腾迪克.但是更容易适应具有多个图层的图形.

  • `show_guide` 已被弃用,请改用 `show.legend`。 (2认同)