如何在ggline中绘制多条线

时间:2019-11-24 23:05:57

标签: r ggplot2 ggpubr

我首先进行了回归,然后根据系数和置信区间手动计算了三个拟合值。数据框如下所示。 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中必须将宽格式表转换为长格式以画多行是非常不便的。

1 个答案:

答案 0 :(得分:1)

使用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()

enter image description here 替代使用情节

或者,您可以使用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])
  }
}

enter image description here

数据: 我仅使用了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