我想制作一个条形图,其中误差条代表标准差,并覆盖散点图以显示各个数据点。数据为微生物计数数据,有2个条件,分别有3个时间点。对于 6 个条件中的 5 个,一些单独的数据点为零,我将其输入为 1,以便有一个数据点显示(在总体方案中,考虑到有多大,0 到 1 的转换不会发生太大变化)其他数字是)。然而,绘制时,大多数条形图(一些“钢”条形图和所有“铜”条形图)的均值不正确。我认为这是由于 y 轴在 log10 尺度上的转换造成的,但我不知道如何解决它! 我对 R 很陌生,对 ggplot2 更陌生,所以我在这里不知所措。任何帮助将不胜感激。
下面是我尝试过的代码,以及数据的子集。
数据:
Material<-c("Copper T0", "Copper T0","Copper T0","Copper T0","Copper T0","Copper T0","Copper T0","Copper T0","Copper T0",
"Copper T+1h","Copper T+1h","Copper T+1h","Copper T+1h","Copper T+1h","Copper T+1h","Copper T+1h","Copper T+1h","Copper T+1h",
"Copper T+2h","Copper T+2h","Copper T+2h","Copper T+2h","Copper T+2h","Copper T+2h","Copper T+2h","Copper T+2h","Copper T+2h",
"Steel T0", "Steel T0","Steel T0","Steel T0","Steel T0","Steel T0","Steel T0","Steel T0","Steel T0",
"Steel T+1h", "Steel T+1h","Steel T+1h","Steel T+1h","Steel T+1h","Steel T+1h","Steel T+1h","Steel T+1h","Steel T+1h",
"Steel T+2h","Steel T+2h","Steel T+2h","Steel T+2h","Steel T+2h","Steel T+2h","Steel T+2h","Steel T+2h","Steel T+2h")
CFU<-c(1,1,1,1,1,1,1,1,12500,
1,1,1,1,1,1,1,1,12500,
1,1,1,1,1,1,1,1,12500,
262500,137500,437500,112500,37500,62500,250000,225000,50000,
50000,112500,37500,62500,75000,1,12500,87500,1,
1,1,25000,12500,1,1,137500,150000,112500)
data3<-data.frame(Material,CFU)
print(data3)
代码:
library(readxl)
library(ggplot2)
library(Hmisc)
library(scales)
order<-c("Steel T0", "Steel T+1h", "Steel T+2h", "Copper T0", "Copper T+1h", "Copper T+2h")
truncate_error_bars <- function(x) {
data <- mean_sdl(x, mult = 1)
data$ymin <- pmax(data$ymin, 0)
return(data)
}
ggplot(data3, aes(x=factor(Material, order), y=`CFU`, fill=factor(Material))) +
stat_summary(fun=mean, geom="bar", show.legend=FALSE, color="black") +
stat_summary(fun.data=truncate_error_bars,
geom="errorbar", width=.2) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(),axis.line=element_line(colour = "darkgrey"))+
scale_y_continuous(trans= 'log10', expand = c(0, 0.0001),
breaks = trans_breaks("log10",n=8, function(x) 10^x))+
geom_point(position = position_jitter(width = 0.2), color = "black", show.legend=FALSE)+
expand_limits(x = 0, y = c(0,1e+07))+
theme(axis.title.x=element_blank(), axis.ticks.x=element_blank())+
scale_fill_manual(values=c("sienna3",
"sienna3",
"sienna3",
"lightslategrey",
"lightslategrey",
"lightslategrey")) +
ylab(bquote(PFU.cm^-2))
我从中得到的图表如下:
图表上显示的平均值对于某些“钢”数据和“铜”数据来说不是正确的。如果可能的话,我希望酒吧能够达到正确的方式。
非常感谢您提前提供的帮助!
?stat_summary
注意事项:
变换尺度是指先变换数据,然后进行统计。
请使用
coord_trans()
来代替。
library(ggplot2)
library(scales)
library(Hmisc)
ggplot(data3, aes(x=factor(Material, order), y=CFU, fill=Material)) +
stat_summary(fun=mean, geom="bar", show.legend=FALSE, color="black") +
stat_summary(fun.data=truncate_error_bars,
geom="errorbar", width=.2) +
coord_trans(y = "log10", ylim = c(1,1e+07)) +
scale_y_continuous(breaks = breaks_log(n = 8, base = 10)) +
geom_point(position = position_jitter(width = 0.2), color = "black", show.legend=FALSE) +
expand_limits(x = 0, y = c(0,1e+07)) +
theme(axis.title.x=element_blank(),
axis.ticks.x=element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.line=element_line(colour = "darkgrey")) +
scale_fill_manual(values=c("sienna3",
"sienna3",
"sienna3",
"lightslategrey",
"lightslategrey",
"lightslategrey")) +
ylab(bquote(PFU.cm^-2))
创建于 2024-06-03,使用 reprex v2.1.0