1

我想为我的 geom_hline 设置一个错误栏,并认为带有不透明度的 geom_ribbon 看起来最好。但我不知道如何让它到达情节的尽头。我希望 geom_ribbon 像 geom_hline 那样接触绘图的两侧。这是示例代码:

library('ggplot2')

x <- c(1,2,3,4,5,6,7,8,9,10)
y <- c(1,2,3,4,5,6,7,8,9,10)

data <- data.frame(x,y)

p1 <- ggplot(data,aes(x = x, y = y)) + geom_line() + geom_hline(yintercept=5)

p1 + geom_ribbon(aes(y = y[5],ymin = y[5]-0.5, ymax = y[5]+0.5, fill = 'red'), alpha = 0.4) 

在此处输入图像描述

4

3 回答 3

2

annotate与无限 x 值一起使用:

ggplot(data, aes(x, y)) + 
  geom_line() + 
  geom_hline(yintercept = 5) +
  annotate('ribbon', x = c(-Inf, Inf), ymin = 5 - 0.5, ymax = 5 + 0.5, 
           alpha = 0.4, fill = 'red')

在此处输入图像描述

如果您需要图例,请geom_ribbon直接使用,如下所示:

ggplot(data, aes(x, y)) + 
  geom_line() + 
  geom_hline(yintercept = 5) +
  geom_ribbon(
    aes(x, y = NULL, ymin = ymin, ymax = ymax, fill = 'my_label'), 
    data.frame(x = c(-Inf, Inf), ymin = 5 - 0.5, ymax = 5 + 0.5),
    alpha = 0.4
  )
于 2017-09-20T08:55:08.027 回答
1

在 geom_hline() 中无法设置 xlim,而是水平线从绘图的一端延伸到另一端。您可以改用 geom_segment,它允许您通过指定线段的起始坐标(x,y)和结束坐标(xend,yend)来控制线的 x 范围和 y 范围

这有效:

library('ggplot2')

x <- c(1,2,3,4,5,6,7,8,9,10)
y <- c(1,2,3,4,5,6,7,8,9,10)

data <- data.frame(x,y)

p1 <- ggplot(data, aes(x = x, y = y)) + geom_line() + geom_segment(aes(x = x[1], xend = x[10], y = y[5], yend = y[5]))

p1 + geom_ribbon(aes(y = y[5],ymin = y[5]-0.5, ymax = y[5]+0.5, fill = 'red'), alpha = 0.4) 
于 2016-12-02T23:13:53.993 回答
-1

几个选项:

1)使用geom_hline而不是geom_ribbon这样(可能是最好的选择):

p1 + geom_hline(yintercept = y[5], color = 'red', size = 8, alpha = 0.4)

在此处输入图像描述

2)通过像这样添加删除绘图区域和轴之间的区域scale_x_continuous(expand=c(0,0))(归功于https://stackoverflow.com/a/22945857/5727278):

p1 + geom_ribbon(aes(y = y[5],ymin = y[5]-0.5, ymax = y[5]+0.5, fill = 'red'), alpha = 0.4) +
scale_x_continuous(expand=c(0,0))

在此处输入图像描述

于 2016-12-02T23:25:46.200 回答