【问题标题】:how to draw multiple lines in ggline如何在ggline中绘制多条线
【发布时间】:2019-11-24 23:05:57
【问题描述】:

我首先运行回归并根据系数和置信区间手动计算三个拟合值。数据框如下所示。 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 分别是yld,yld.l,yld.u,x 是dd_j。我可以用下面的代码成功绘制一条线,但不知道如何绘制所有三条。

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

有什么想法吗?

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

【问题讨论】:

    标签: r ggplot2 ggpubr


    【解决方案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()
    

    替代使用情节

    或者,您可以绘制数据集,而无需使用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
    

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 2017-06-13
      • 2021-09-14
      相关资源
      最近更新 更多