如何在ggline中绘制多条线

how to draw multiple lines in ggline

我 运行 首先进行回归,然后根据系数和置信区间手动计算三个拟合值。数据框看起来像这样。 yld 是用系数计算的拟合值,yld.lyld.u 是用上下置信区间计算的拟合值。

> head(m.m.m)
      harv   frez_j    dd_j  cupc_j    sm7_j fitted_j max_spring_j sp_spring_j pc_spring_j       lt       qt      yld
1 31793.35 320.0668 2437.82 13.0822 50.63953 46.94146     23.34035   0.0844567    3.260585 18.09834 409.1669 48.78323
2 31793.35 320.0668 2407.26 13.0822 50.63953 46.94146     23.34035   0.0844567    3.260585 18.09834 409.1669 48.73291
3 31793.35 320.0668 2638.01 13.0822 50.63953 46.94146     23.34035   0.0844567    3.260585 18.09834 409.1669 48.90514
4 31793.35 320.0668 2838.45 13.0822 50.63953 46.94146     23.34035   0.0844567    3.260585 18.09834 409.1669 48.72009
5 31793.35 320.0668 2944.05 13.0822 50.63953 46.94146     23.34035   0.0844567    3.260585 18.09834 409.1669 48.52131
6 31793.35 320.0668 2765.93 13.0822 50.63953 46.94146     23.34035   0.0844567    3.260585 18.09834 409.1669 48.81819
         yld.l        yld.u
1 7.006441e-09 339659325071
2 7.272086e-09 326577117107
3 5.525450e-09 432853975445
4 4.400996e-09 539343282695
5 3.918681e-09 600793423028
6 4.773276e-09 499283037958

我想画三条线,y分别为yldyld.lyld.u,x为dd_j。我可以使用下面的代码成功绘制一条线,但不知道如何绘制所有三条线。

ggline(data=m.m.m,x='dd_j',y='yld',color = 'red',numeric.x.axis = T)

有什么想法吗?

顺便说一句,我认为在 ggplot 和 ggpubr 中,您必须将宽格式 table 转换为长格式才能绘制多条线,这非常不方便。

使用 ggplot2、dplyr 和 tidyr

起初,ggplot 格式可能会让人很困惑,因为大多数时候您必须根据 ggplot 的非典型语法重新组织数据。 但是,如果您使用 dplyrtidyr 提供的工具,它会变得非常简单,只需要几行代码。

在这里,我们将您的数据组织如下:

library(dplyr)
library(tidyr)
df = df %>% select(., dd_j, yld, yld.l, yld.u) %>% pivot_longer(., -dd_j,names_to = "condition", values_to = "Value")

然后我们使用 ggplot 绘制它们:

library(ggplot2)
ggplot(df, aes(x = dd_j, y = Value, color = condition)) + geom_line()

替代使用图

或者,您可以绘制数据集而无需使用 plot 重新组织它们:

xvec = "dd_j"
yvec = c("yld","yld.l","yld.u")
color = c("black", "blue","red")
for(i in 1:length(yvec))
{
  if(i ==1) {
    plot(x = df[,xvec], 
         y = df[,yvec[i]], 
         type = "l", 
         ylim = c(0,max(df[,yvec])), 
         col = color[i])
  }
  else
  {
    lines(x = df[,xvec], 
          y = df[,yvec[i]],
          type = "l", 
          col = color[i])
  }
}

数据: 我只使用了 head

提供的一小部分数据样本
df = data.frame(harv = rep(31793.5,6),
                dd_j = c(2437.82,2407.26,2638.01,2838.45,2944.05,2765.93),
                yld  = c(48.78,48.73,48.90,48.72,48.52,48.82),
                yld.l = c(7.00,7.27,5.53,4.40,3.91,4.77),
                yld.u = c(3396,3265,4328,5393,6008,4992))
df