R:显示值之间的百分比差异:如何计算误差线?
R: Show % differences between values: how to calculate error bars?
我正在尝试显示组之间的百分比变化。作为一种基本方法,我想将所有组的均值与默认值进行比较,并仅以 [%] 显示这些差异。但是,我希望以某种方式表示均值内的可变性,比如说标准差。但是,我不确定如何展示它,实际上它是否有意义?
这是我的均值和误差条的简单条形图示例,计算方式为 mean
和 sd
:
dd <- data.frame(id = rep(c(1,2,3), 2),
vol = c(10,5,8,11,10,9),
reg = rep(c('control', 'new'), each = 3))
# calculate mean and sd
sum_dd <- dd %>%
group_by(reg) %>%
summarize(V_mean = mean(vol, na.rm = T),
V_sd = sd(vol, na.rm = T)) #
# Plot bar plot and error bars
sum_dd %>%
ggplot(aes(x = reg,
y = V_mean)) +
geom_bar(stat = 'identity') +
geom_errorbar(aes(x=reg,
min=V_mean-V_sd,
ymax=V_mean+V_sd)) #
这个绘图生成带有错误条的漂亮条形图,很明显我的每个组的 means
和 sd
是什么:
但是,如何表示组 new
是 control
的百分比变化?
在这里,我需要先计算从 control
到 new
的百分比变化。然后我可以绘制百分比变化的条形图。但是我可以根据哪些值计算标准偏差之类的东西来绘制和显示结果中的可变性(例如使用误差线)?
sum_dd %>%
group_by(reg) %>%
# Calculate % change from a to b value
mutate(control_mean = 7.67,
perc_change = (10-7.67)/7.67 * 100) %>%
filter(reg !='control') %>%
ggplot(aes(x = reg,
y = perc_change)) +
geom_bar(stat = 'identity') #+
# from which values calculate the error bar??
geom_errorbar(aes(x=reg,
min=V_mean-V_sd,
ymax=V_mean+V_sd)) # +
感谢您的想法!
首先,您可以更轻松地使用 stat_summary()
获取原始图,因为它会直接在 ggplot()
调用中为您计算 mean
和 SD
.
但是对于您的问题,您可以通过执行 mutate()
将 vol[reg == "control"]
设置为分母来轻松计算传递给 ggplot()
之前的倍数变化。然后您可以使用 {scales} 格式化 y
轴。
library(tidyverse)
library(scales)
dd <- data.frame(id = rep(c(1,2,3), 2),
vol = c(10,5,8,11,10,9),
reg = rep(c('control', 'new'), each = 3))
# original plot using stat_summary to avoid transforming data
dd %>%
ggplot(aes(reg, vol)) +
stat_summary(geom = "bar", fun = mean) +
stat_summary(geom = "errorbar", fun.data = mean_cl_normal, fun.args = list(mult = 1))
# calculate % of control
dd %>%
mutate(norm_vol = vol/mean(vol[reg == "control"])) %>%
ggplot(aes(reg, norm_vol)) +
stat_summary(geom = "bar", fun = mean) +
stat_summary(geom = "errorbar", fun.data = mean_cl_normal, fun.args = list(mult = 1)) +
scale_y_continuous(labels = scales::percent_format())
由 reprex package (v2.0.1)
创建于 2022-02-21
我正在尝试显示组之间的百分比变化。作为一种基本方法,我想将所有组的均值与默认值进行比较,并仅以 [%] 显示这些差异。但是,我希望以某种方式表示均值内的可变性,比如说标准差。但是,我不确定如何展示它,实际上它是否有意义?
这是我的均值和误差条的简单条形图示例,计算方式为 mean
和 sd
:
dd <- data.frame(id = rep(c(1,2,3), 2),
vol = c(10,5,8,11,10,9),
reg = rep(c('control', 'new'), each = 3))
# calculate mean and sd
sum_dd <- dd %>%
group_by(reg) %>%
summarize(V_mean = mean(vol, na.rm = T),
V_sd = sd(vol, na.rm = T)) #
# Plot bar plot and error bars
sum_dd %>%
ggplot(aes(x = reg,
y = V_mean)) +
geom_bar(stat = 'identity') +
geom_errorbar(aes(x=reg,
min=V_mean-V_sd,
ymax=V_mean+V_sd)) #
这个绘图生成带有错误条的漂亮条形图,很明显我的每个组的 means
和 sd
是什么:
但是,如何表示组 new
是 control
的百分比变化?
在这里,我需要先计算从 control
到 new
的百分比变化。然后我可以绘制百分比变化的条形图。但是我可以根据哪些值计算标准偏差之类的东西来绘制和显示结果中的可变性(例如使用误差线)?
sum_dd %>%
group_by(reg) %>%
# Calculate % change from a to b value
mutate(control_mean = 7.67,
perc_change = (10-7.67)/7.67 * 100) %>%
filter(reg !='control') %>%
ggplot(aes(x = reg,
y = perc_change)) +
geom_bar(stat = 'identity') #+
# from which values calculate the error bar??
geom_errorbar(aes(x=reg,
min=V_mean-V_sd,
ymax=V_mean+V_sd)) # +
感谢您的想法!
首先,您可以更轻松地使用 stat_summary()
获取原始图,因为它会直接在 ggplot()
调用中为您计算 mean
和 SD
.
但是对于您的问题,您可以通过执行 mutate()
将 vol[reg == "control"]
设置为分母来轻松计算传递给 ggplot()
之前的倍数变化。然后您可以使用 {scales} 格式化 y
轴。
library(tidyverse)
library(scales)
dd <- data.frame(id = rep(c(1,2,3), 2),
vol = c(10,5,8,11,10,9),
reg = rep(c('control', 'new'), each = 3))
# original plot using stat_summary to avoid transforming data
dd %>%
ggplot(aes(reg, vol)) +
stat_summary(geom = "bar", fun = mean) +
stat_summary(geom = "errorbar", fun.data = mean_cl_normal, fun.args = list(mult = 1))
# calculate % of control
dd %>%
mutate(norm_vol = vol/mean(vol[reg == "control"])) %>%
ggplot(aes(reg, norm_vol)) +
stat_summary(geom = "bar", fun = mean) +
stat_summary(geom = "errorbar", fun.data = mean_cl_normal, fun.args = list(mult = 1)) +
scale_y_continuous(labels = scales::percent_format())
由 reprex package (v2.0.1)
创建于 2022-02-21