当前位置: 首页>后端>正文

R可视化之美之科研绘图-08. 置信区间绘图

本内容为【科研私家菜】R可视化之美之科研绘图系列课程,快来收藏关注【科研私家菜】

实现R语言数据可视化ggplot绘制置信区间

01 单组置信区间绘制

x <- 1:10
y <- x^2
ci_l <- x^2 - 0.5 * x
ci_r <- x^2 + 0.5 * x

dat_plot <- data.frame(x, y, ci_l, ci_r)

添加置信区间的核心函数是:geom_ribbon(),并且要注意,先画置信区间,再绘制线条,才能保证线在置信区间的上方。

ggplot(dat_plot, aes(x = x)) +                  # x轴在此处添加,目的为了置信区间与拟合线共享同一个x
  geom_ribbon(aes(ymin = ci_l, ymax = ci_r)) +  # 添加置信区间
  geom_line(aes(y = y))                         # 添加拟合线

效果如下:

R可视化之美之科研绘图-08. 置信区间绘图,第1张

02 多组置信区间绘制

x <- 1:10
y1 <- x^2
ci_l1 <- x^2 - 0.5 * x
ci_r1 <- x^2 + 0.5 * x

y2 <- 20 * log(x)
ci_l2 <- 20 * log(x) - 0.5 * x
ci_r2 <- 20 * log(x) + 0.5 * x

dat_plot <- data.frame(rbind(cbind(x, y1, ci_l1, ci_r1), cbind(x, y2, ci_l2, ci_r2)))
names(dat_plot) <- c("x", "y", "ci_l", "ci_r")
dat_plot$group <- rep(c("G1", "G2"), each = 10)

ggplot(dat_plot, aes(x = x, group = group)) +
  geom_ribbon(aes(ymin = ci_l, ymax = ci_r)) +
  geom_line(aes(y = y))

效果如下:

R可视化之美之科研绘图-08. 置信区间绘图,第2张

修改颜色
我们将参数 group = 用 color = 与 fill = 替换即可。值得一提的是,这里的color = 如果加在ggplot()中,添加的就会是拟合线与置信区间外边线两条曲线。若不想要置信区间的外边线, color =写在geom_line()中即可。
此外,还需要注意,绘制置信区间,若线条与区间是相同颜色,一定要修改置信区间的透明度,利用alpha = 进行修改,其范围在0-1之间,并且值越小越透明。

ggplot(dat_plot, aes(x = x, color = group, fill = group)) +
  geom_ribbon(aes(ymin = ci_l, ymax = ci_r), alpha = 0.3) +  # alpha 修改透明度
  geom_line(aes(y = y))

R可视化之美之科研绘图-08. 置信区间绘图,第3张
dat_plot <- data.frame(x, y1, ci_l1, ci_r1, y2, ci_l2, ci_r2) # 基于前文的数据
ggplot(dat_plot, aes(x = x)) +
  geom_ribbon(aes(ymin = ci_l1, ymax = ci_r1, fill = "G1"), alpha = 0.3) +
  geom_ribbon(aes(ymin = ci_l2, ymax = ci_r2, fill = "G2"), alpha = 0.3) +
  geom_line(aes(y = y1, color = "G1")) +
  geom_line(aes(y = y2, color = "G2"))

面对上述这种数据格式,我们处理起来也十分简单,我们只需要在对应的aes() 函数中,写清楚对应的分组名称即可。

color = 与 fill = 一定要写在 aes() 里面!!!

R可视化之美之科研绘图-08. 置信区间绘图,第4张
ggplot(dat_plot, aes(x = x)) +
  geom_ribbon(aes(ymin = ci_l1, ymax = ci_r1, fill = "G1", color = "G1"), 
              alpha = 0.3, linetype = 2) +        # linetype = 2 表示置信区间描边线为虚线
  geom_ribbon(aes(ymin = ci_l2, ymax = ci_r2, fill = "G2", color = "G2"), 
              alpha = 0.3, linetype = 2) +
  geom_line(aes(y = y1, color = "G1")) +
  geom_line(aes(y = y2, color = "G2")) +
  theme_bw(base_family = "Times") +
  theme(panel.grid = element_blank(),
    legend.position = "top",                      # legend 置顶
    panel.border = element_blank(),
    text = element_text(family = "STHeiti"),      # Mac 系统中中文绘图
    plot.title = element_text(hjust = 0.5)) +     # 标题居中
  labs(x = "y", y = "x", title = "分组置信区间",
       color = "", fill = "")                      # 将置信区间与拟合线的 legend 合并,并且不要 legend 的小标题 

参考资料

《R语言数据可视化之美》

关注R小盐,关注科研私家菜(溦?工众號: SciPrivate),有问题请联系R小盐。让我们一起来学习 R可视化之美之科研绘图


https://www.xamrdz.com/backend/3p61921440.html

相关文章: