如何在ggline中绘制多条线
how to draw multiple lines in ggline
我 运行 首先进行回归,然后根据系数和置信区间手动计算三个拟合值。数据框看起来像这样。 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 中,您必须将宽格式 table 转换为长格式才能绘制多条线,这非常不方便。
使用 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
我 运行 首先进行回归,然后根据系数和置信区间手动计算三个拟合值。数据框看起来像这样。 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 中,您必须将宽格式 table 转换为长格式才能绘制多条线,这非常不方便。
使用 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