首页 > 解决方案 > 根据一列用 CI 画三条线

问题描述

我的数据是

x_mean    w_mean    m_mean        se      LLCI      ULCI
     1.6667    3.1000    3.1565    0.1164    2.9273    3.3856
     2.6667    3.1000    3.2456    0.0683    3.1110    3.3801
     4.0000    3.1000    3.3644    0.1070    3.1539    3.5750
     1.6667    4.0000    2.9842    0.0727    2.8410    3.1273
     2.6667    4.0000    3.2712    0.0490    3.1747    3.3677
     4.0000    4.0000    3.6539    0.0774    3.5015    3.8064
     1.6667    4.5560    2.8777    0.0933    2.6941    3.0614
     2.6667    4.5560    3.2870    0.0666    3.1559    3.4182
     4.0000    4.5560    3.8328    0.1136    3.6092    4.0563

我想在一个图中绘制三个由 w_mean 区分的单独的线(w 只有三个唯一值),其中 x = x_mean,y = m_mean。我还想为这些行添加置信区间。我可以使用 ggplot 来实现吗?谢谢您的帮助。如果我需要澄清任何细节,请告诉我。

标签: rggplot2

解决方案


第一步,绘制 3 条线,每条线w_mean很简单。如果aesthetic定义颜色(以及其他)是一个因素,ggplot将自动分隔线条。

library(ggplot2)

g <- ggplot(df1, aes(x_mean, m_mean, color = factor(w_mean))) +
  geom_line()
g

在此处输入图像描述

现在添加置信带并使图例标题更漂亮。

g + geom_ribbon(aes(ymin = LLCI, ymax = ULCI, 
                    fill = factor(w_mean)), 
                alpha = 0.25,
                color = NA,
                show.legend = FALSE) +
  labs(color = "w_mean")

在此处输入图像描述

数据

df1 <-
structure(list(x_mean = c(1.6667, 2.6667, 4, 1.6667, 2.6667, 
4, 1.6667, 2.6667, 4), w_mean = c(3.1, 3.1, 3.1, 4, 4, 4, 4.556, 
4.556, 4.556), m_mean = c(3.1565, 3.2456, 3.3644, 2.9842, 3.2712, 
3.6539, 2.8777, 3.287, 3.8328), se = c(0.1164, 0.0683, 0.107, 
0.0727, 0.049, 0.0774, 0.0933, 0.0666, 0.1136), LLCI = c(2.9273, 
3.111, 3.1539, 2.841, 3.1747, 3.5015, 2.6941, 3.1559, 3.6092), 
    ULCI = c(3.3856, 3.3801, 3.575, 3.1273, 3.3677, 3.8064, 3.0614, 
    3.4182, 4.0563)), class = "data.frame", row.names = c(NA, 
-9L))

推荐阅读