我首先进行了回归,然后根据系数和置信区间手动计算了三个拟合值。数据框如下所示。 yld
是使用系数计算的拟合值,yld.l
和yld.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中必须将宽格式表转换为长格式以画多行是非常不便的。
答案 0 :(得分:1)
使用ggplot2,dplyr和tidyr
起初,ggplot
格式可能会造成很大的混乱,因为大多数时候您不得不根据ggplot
的非典型语法来重新组织数据。
但是,如果您使用dplyr
和tidyr
提供的工具,它可能会变得非常简单,并且只需要很少的代码行。
在这里,我们按以下方式整理您的数据:
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