如何将阴影置信区间添加到具有指定值的线图
How to add shaded confidence intervals to line plot with specified values
我有一小部分 table 汇总数据,其中包含四个类别的优势比、置信上限和置信下限,每个类别有六个级别。我想使用 ggplot2 生成一个图表,它看起来类似于您指定 lm 时创建的通常图表,它是 se,但我希望 R 只使用我在 table 中的预先指定的值.我设法创建了带有误差线的折线图,但它们重叠并使其不清楚。数据如下所示:
interval OR Drug lower upper
14 0.004 a 0.002 0.205
30 0.022 a 0.001 0.101
60 0.13 a 0.061 0.23
90 0.22 a 0.14 0.34
180 0.25 a 0.17 0.35
365 0.31 a 0.23 0.41
14 0.84 b 0.59 1.19
30 0.85 b 0.66 1.084
60 0.94 b 0.75 1.17
90 0.83 b 0.68 1.01
180 1.28 b 1.09 1.51
365 1.58 b 1.38 1.82
14 1.9 c 0.9 4.27
30 2.91 c 1.47 6.29
60 2.57 c 1.52 4.55
90 2.05 c 1.31 3.27
180 2.422 c 1.596 3.769
365 2.83 c 1.93 4.26
14 0.29 d 0.04 1.18
30 0.09 d 0.01 0.29
60 0.39 d 0.17 0.82
90 0.39 d 0.2 0.7
180 0.37 d 0.22 0.59
365 0.34 d 0.21 0.53
我试过这个:
limits <- aes(ymax=upper, ymin=lower)
dodge <- position_dodge(width=0.9)
ggplot(data, aes(y=OR, x=days, colour=Drug)) +
geom_line(stat="identity") +
geom_errorbar(limits, position=dodge)
并搜索了一个 suitable 答案来创建一个漂亮的情节,但我很困惑!
非常感谢任何帮助!
您需要以下几行:
p<-ggplot(data=data, aes(x=interval, y=OR, colour=Drug)) + geom_point() + geom_line()
p<-p+geom_ribbon(aes(ymin=data$lower, ymax=data$upper), linetype=2, alpha=0.1)
这是使用 polygon() 的基本 R 方法,因为@jmb 在评论中请求了解决方案。请注意,我必须为要绘制的多边形定义两组 x 值和关联的 y 值。它通过绘制多边形的外周来工作。我定义 plot type = 'n' 并分别使用 points() 来获取多边形顶部的点。我个人的偏好是在可能的情况下使用上面的 ggplot 解决方案,因为 polygon() 非常笨重。
library(tidyverse)
data('mtcars') #built in dataset
mean.mpg = mtcars %>%
group_by(cyl) %>%
summarise(N = n(),
avg.mpg = mean(mpg),
SE.low = avg.mpg - (sd(mpg)/sqrt(N)),
SE.high =avg.mpg + (sd(mpg)/sqrt(N)))
plot(avg.mpg ~ cyl, data = mean.mpg, ylim = c(10,30), type = 'n')
#note I have defined c(x1, x2) and c(y1, y2)
polygon(c(mean.mpg$cyl, rev(mean.mpg$cyl)),
c(mean.mpg$SE.low,rev(mean.mpg$SE.high)), density = 200, col ='grey90')
points(avg.mpg ~ cyl, data = mean.mpg, pch = 19, col = 'firebrick')
我有一小部分 table 汇总数据,其中包含四个类别的优势比、置信上限和置信下限,每个类别有六个级别。我想使用 ggplot2 生成一个图表,它看起来类似于您指定 lm 时创建的通常图表,它是 se,但我希望 R 只使用我在 table 中的预先指定的值.我设法创建了带有误差线的折线图,但它们重叠并使其不清楚。数据如下所示:
interval OR Drug lower upper
14 0.004 a 0.002 0.205
30 0.022 a 0.001 0.101
60 0.13 a 0.061 0.23
90 0.22 a 0.14 0.34
180 0.25 a 0.17 0.35
365 0.31 a 0.23 0.41
14 0.84 b 0.59 1.19
30 0.85 b 0.66 1.084
60 0.94 b 0.75 1.17
90 0.83 b 0.68 1.01
180 1.28 b 1.09 1.51
365 1.58 b 1.38 1.82
14 1.9 c 0.9 4.27
30 2.91 c 1.47 6.29
60 2.57 c 1.52 4.55
90 2.05 c 1.31 3.27
180 2.422 c 1.596 3.769
365 2.83 c 1.93 4.26
14 0.29 d 0.04 1.18
30 0.09 d 0.01 0.29
60 0.39 d 0.17 0.82
90 0.39 d 0.2 0.7
180 0.37 d 0.22 0.59
365 0.34 d 0.21 0.53
我试过这个:
limits <- aes(ymax=upper, ymin=lower)
dodge <- position_dodge(width=0.9)
ggplot(data, aes(y=OR, x=days, colour=Drug)) +
geom_line(stat="identity") +
geom_errorbar(limits, position=dodge)
并搜索了一个 suitable 答案来创建一个漂亮的情节,但我很困惑!
非常感谢任何帮助!
您需要以下几行:
p<-ggplot(data=data, aes(x=interval, y=OR, colour=Drug)) + geom_point() + geom_line()
p<-p+geom_ribbon(aes(ymin=data$lower, ymax=data$upper), linetype=2, alpha=0.1)
这是使用 polygon() 的基本 R 方法,因为@jmb 在评论中请求了解决方案。请注意,我必须为要绘制的多边形定义两组 x 值和关联的 y 值。它通过绘制多边形的外周来工作。我定义 plot type = 'n' 并分别使用 points() 来获取多边形顶部的点。我个人的偏好是在可能的情况下使用上面的 ggplot 解决方案,因为 polygon() 非常笨重。
library(tidyverse)
data('mtcars') #built in dataset
mean.mpg = mtcars %>%
group_by(cyl) %>%
summarise(N = n(),
avg.mpg = mean(mpg),
SE.low = avg.mpg - (sd(mpg)/sqrt(N)),
SE.high =avg.mpg + (sd(mpg)/sqrt(N)))
plot(avg.mpg ~ cyl, data = mean.mpg, ylim = c(10,30), type = 'n')
#note I have defined c(x1, x2) and c(y1, y2)
polygon(c(mean.mpg$cyl, rev(mean.mpg$cyl)),
c(mean.mpg$SE.low,rev(mean.mpg$SE.high)), density = 200, col ='grey90')
points(avg.mpg ~ cyl, data = mean.mpg, pch = 19, col = 'firebrick')