在 R 中用误差条绘制 bin 平均值
Plot bin averaged values with error bars in R
我有一个包含三列“DateTime”、“T_ET”和“LAI”的数据框。我想在同一个图上绘制 T_ET(在 y 轴上)与 LAI(在 x 轴上)以及 T_ET 的 0.1-bin LAI 平均值(Wei 等人, 2017):
上图中,y轴为T_ET或T/(E+T),x轴为LAI,带误差线的红色空心菱形为黑点的0.1-bin LAI平均,标准偏差,实线是
单个数据点的回归(根据 bin 平均值估计),n 是可用数据点。虚线是 95% 的置信区间。
怎样才能得到类似上图的图呢?请使用以下 link 查找样本数据:file
或使用以下示例数据:
df <- structure(list(DateTime = structure(c(1478088000, 1478347200, 1478692800, 1478779200, 1478865600, 1478952000, 1479124800, 1479211200, 1479297600, 1479470400), class = c("POSIXct", "POSIXt"), tzone = "GMT"),
T_ET = c(0.996408350852751, 0.904748351479432, 0.28771236118773, 0.364402232484906, 0.452348409759872, 0.415408041501318, 0.629291202120187, 0.812083112145703, 0.992414777441755, 0.818032913071265),
LAI = c(1.3434, 1.4669, 1.6316, 1.6727, 1.8476, 2.0225, 2.3723, 2.5472, 2.7221, 3.0719)),
row.names = c(NA, 10L),
class = "data.frame")
您可以在通过 stat_summary_bin()
绘图时直接执行此操作。默认情况下,与此关联的 geom 将是 pointrange
geom 并使用 mean_se()
。 bins=
控制 bin 的数量,但您也可以提供 binwidth=
。请注意,使用 pointrange geom,fatten
控制中心点的大小:
ggplot(df, aes(LAI, T_ET)) + geom_point() + theme_classic() +
stat_summary_bin(bins=3, color='red', shape=5, fatten=5)
您的示例数据有点少,所以这里是 diamonds
数据集的另一个示例。在这里,我通过组合错误栏和 poing geom 构建与您显示的示例图相同的外观。请注意 .
ggplot(diamonds, aes(carat, price)) + geom_point(size=0.3) +
stat_summary_bin(geom='errorbar', color='red', bins=12, width=0.001) +
stat_summary_bin(geom='point', size=3, shape=5, color='red', bins=12) +
theme_classic()
编辑:显示分箱数据的回归
如评论中所述,根据分箱数据而不是原始数据 绘制回归线 是可能的,但不能通过 stat_summary_bin()
函数,除非您可以使用 loess
。如果您正在寻找线性回归,则需要在 ggplot
之外对数据进行分箱,然后在分箱数据上绘制回归图。
这可能是设计使然。根据汇总数据绘制回归线(一种汇总数据的方式)本质上不是一个好主意。无论如何,这是通过 diamonds
数据集执行此操作的一种方法。我们可以使用 cut()
函数将数据分成不同的分箱,然后汇总这些分箱值的数据。由于 cut()
函数标记输出的方式,我们必须创建自己的标签。因为我们在这个例子中被切割成 12 个相等的部分,所以我在 x 轴上创建了 12 个均匀间隔的位置来放置我们的数据值——这在你的情况下可能会有所不同,只要注意你根据什么来标记数据代表什么最有统计意义。
df <- diamonds
# setting interval labeling
bin_width <- diff(range(df$carat)/12)
bin_labels <- c((range(df$carat)[1] + (bin_width/2))+(0:11*bin_width))
# cutting the data
df$bins <- cut(df$carat, breaks=12, labels=bin_labels)
df$bins <- as.numeric(levels(df$bins)[df$bins]) # convert factor to numeric
ggplot(diamonds, aes(carat, price)) + geom_point(size=0.3) +
stat_summary_bin(geom='errorbar', color='red', bins=12, width=0.001) +
stat_summary_bin(geom='point', size=3, shape=5, color='red', bins=12) +
geom_smooth(data=df, aes(x=bins), method='lm', color='blue') +
theme_classic()
请注意,上面的回归线 对所有分箱值均等加权 。这通常不是一个好主意,除非您的数据在数据集中均匀分布。 如果您要绘制回归线,我仍然建议您将其链接到原始数据,这更能代表数据中的真实情况。看起来像这样:
ggplot(diamonds, aes(carat, price)) + geom_point(size=0.3) +
stat_summary_bin(geom='errorbar', color='red', bins=12, width=0.001) +
stat_summary_bin(geom='point', size=3, shape=5, color='red', bins=12) +
geom_smooth(method='lm', color='green') +
theme_classic()
归根结底,为 binned 数据绘制回归线是 汇总汇总数据 而不是汇总原始数据.这是统计数据,所以使用风险自负。但如果你只是出于某种奇怪的原因必须...我不能阻止你。 ;)
我有一个包含三列“DateTime”、“T_ET”和“LAI”的数据框。我想在同一个图上绘制 T_ET(在 y 轴上)与 LAI(在 x 轴上)以及 T_ET 的 0.1-bin LAI 平均值(Wei 等人, 2017):
上图中,y轴为T_ET或T/(E+T),x轴为LAI,带误差线的红色空心菱形为黑点的0.1-bin LAI平均,标准偏差,实线是 单个数据点的回归(根据 bin 平均值估计),n 是可用数据点。虚线是 95% 的置信区间。
怎样才能得到类似上图的图呢?请使用以下 link 查找样本数据:file
或使用以下示例数据:
df <- structure(list(DateTime = structure(c(1478088000, 1478347200, 1478692800, 1478779200, 1478865600, 1478952000, 1479124800, 1479211200, 1479297600, 1479470400), class = c("POSIXct", "POSIXt"), tzone = "GMT"),
T_ET = c(0.996408350852751, 0.904748351479432, 0.28771236118773, 0.364402232484906, 0.452348409759872, 0.415408041501318, 0.629291202120187, 0.812083112145703, 0.992414777441755, 0.818032913071265),
LAI = c(1.3434, 1.4669, 1.6316, 1.6727, 1.8476, 2.0225, 2.3723, 2.5472, 2.7221, 3.0719)),
row.names = c(NA, 10L),
class = "data.frame")
您可以在通过 stat_summary_bin()
绘图时直接执行此操作。默认情况下,与此关联的 geom 将是 pointrange
geom 并使用 mean_se()
。 bins=
控制 bin 的数量,但您也可以提供 binwidth=
。请注意,使用 pointrange geom,fatten
控制中心点的大小:
ggplot(df, aes(LAI, T_ET)) + geom_point() + theme_classic() +
stat_summary_bin(bins=3, color='red', shape=5, fatten=5)
您的示例数据有点少,所以这里是 diamonds
数据集的另一个示例。在这里,我通过组合错误栏和 poing geom 构建与您显示的示例图相同的外观。请注意
ggplot(diamonds, aes(carat, price)) + geom_point(size=0.3) +
stat_summary_bin(geom='errorbar', color='red', bins=12, width=0.001) +
stat_summary_bin(geom='point', size=3, shape=5, color='red', bins=12) +
theme_classic()
编辑:显示分箱数据的回归
如评论中所述,根据分箱数据而不是原始数据 绘制回归线 是可能的,但不能通过 stat_summary_bin()
函数,除非您可以使用 loess
。如果您正在寻找线性回归,则需要在 ggplot
之外对数据进行分箱,然后在分箱数据上绘制回归图。
这可能是设计使然。根据汇总数据绘制回归线(一种汇总数据的方式)本质上不是一个好主意。无论如何,这是通过 diamonds
数据集执行此操作的一种方法。我们可以使用 cut()
函数将数据分成不同的分箱,然后汇总这些分箱值的数据。由于 cut()
函数标记输出的方式,我们必须创建自己的标签。因为我们在这个例子中被切割成 12 个相等的部分,所以我在 x 轴上创建了 12 个均匀间隔的位置来放置我们的数据值——这在你的情况下可能会有所不同,只要注意你根据什么来标记数据代表什么最有统计意义。
df <- diamonds
# setting interval labeling
bin_width <- diff(range(df$carat)/12)
bin_labels <- c((range(df$carat)[1] + (bin_width/2))+(0:11*bin_width))
# cutting the data
df$bins <- cut(df$carat, breaks=12, labels=bin_labels)
df$bins <- as.numeric(levels(df$bins)[df$bins]) # convert factor to numeric
ggplot(diamonds, aes(carat, price)) + geom_point(size=0.3) +
stat_summary_bin(geom='errorbar', color='red', bins=12, width=0.001) +
stat_summary_bin(geom='point', size=3, shape=5, color='red', bins=12) +
geom_smooth(data=df, aes(x=bins), method='lm', color='blue') +
theme_classic()
请注意,上面的回归线 对所有分箱值均等加权 。这通常不是一个好主意,除非您的数据在数据集中均匀分布。 如果您要绘制回归线,我仍然建议您将其链接到原始数据,这更能代表数据中的真实情况。看起来像这样:
ggplot(diamonds, aes(carat, price)) + geom_point(size=0.3) +
stat_summary_bin(geom='errorbar', color='red', bins=12, width=0.001) +
stat_summary_bin(geom='point', size=3, shape=5, color='red', bins=12) +
geom_smooth(method='lm', color='green') +
theme_classic()
归根结底,为 binned 数据绘制回归线是 汇总汇总数据 而不是汇总原始数据.这是统计数据,所以使用风险自负。但如果你只是出于某种奇怪的原因必须...我不能阻止你。 ;)