如何在 ggplot2 中使用 geom_ribbon 为 geom_hline 创建错误栏?
How do i make an errorbar for a geom_hline using geom_ribbon in ggplot2?
我想为我的 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)
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)
情侣选项:
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))
删除绘图区域和轴之间的区域(归功于 ):
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))
使用具有无限 x 值的 annotate
:
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
)
我想为我的 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)
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)
情侣选项:
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))
删除绘图区域和轴之间的区域(归功于 ):
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))
使用具有无限 x 值的 annotate
:
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
)