条形图上 stats_summary 的平均值(y 轴采用对数刻度)不正确

问题描述 投票:0回答:1

我想制作一个条形图,其中误差条代表标准差,并覆盖散点图以显示各个数据点。数据为微生物计数数据,有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))

我从中得到的图表如下:

条形图

图表上显示的平均值对于某些“钢”数据和“铜”数据来说不是正确的。如果可能的话,我希望酒吧能够达到正确的方式。

非常感谢您提前提供的帮助!

ggplot2 bar-chart mean logarithm
1个回答
0
投票

?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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.