【问题标题】:Half of the boxplot made in GGPLOT2用 GGPLOT2 制作的箱线图的一半
【发布时间】:2021-01-21 10:14:16
【问题描述】:

我正在使用 ggplot2 包制作箱线图,但是,由于某些外部原因,箱线图只有一半用于“控制”和“商业 IMD”处理。

见下文,当使用“箱线图”功能制作图表时,图表正常完成。

mediasCon = tapply(dados$CS, dados$Trat, mean)
boxplot(dados$CS ~ dados$Trat, data = dados, col="gray", 
        xlab = 'Tratamentos', ylab = 'Espermatozoides - Cabeça Solta')
points(1:3, mediasCon, col = 'Red', pch = 16)

但是,当使用 GGPLOT2 函数制作相同的图表时,看到前两个处理只完成了一半的图表,为什么会出现这种情况?

另外,如何使用 ggplot2 函数添加箱线图“尾巴”?

library(ggplot2)
ggplot(data=dados, aes(x=Trat, y=CS)) + geom_boxplot(fill=c("#DEEBF7","#2171B5","#034E7B"),color="black") +
  xlab('Tratamentos') +
  ylab('Espermatozoides - Cabeça Solta') + 
  stat_summary(fun=mean, colour="black", geom="point", 
               shape=18, size=5) + 
                     theme(axis.title = element_text(size = 20),
                     axis.text = element_text(size = 16)) 

【问题讨论】:

    标签: r ggplot2 plot graphics boxplot


    【解决方案1】:

    如果您查看?geom_boxplot 下的帮助文件,您会看到:

    上下铰链对应于第一个和第三个四分位数(第 25 个和第 75 个百分位数)。这与 boxplot() 函数使用的方法略有不同,并且在小样本中可能很明显。有关如何为 boxplot() 计算铰链位置的更多信息,请参阅 boxplot.stats()

    在您的情况下,IMD Commercial 的 4 个条目是 c(0, 1, 1, 1),这肯定是一个小样本。

    解决此问题的一种方法是计算您希望铰链的位置并将该数据传递给ggplot,使用stat = "identity"。这使得代码有点复杂,但是当您尝试修改默认行为时通常会出现这种情况:

    library(ggplot2)
    library(dplyr)
    
    dados %>%
      group_by(Trat) %>%
      summarize(median = median(CS), mean = mean(CS),
                upper = quantile(CS, 0.75, type = 2),
                lower = quantile(CS, 0.25, type = 2),
                max = max(CS), min = min(CS)) %>%
      ggplot(aes(x = Trat, y = mean, fill = Trat)) + 
      geom_boxplot(aes(ymin = min, lower = lower, 
                       middle = median, upper = upper, ymax = max),
                   stat = "identity", color = "black") +
      geom_point(size = 3, shape = 21, fill = "red") +
      scale_fill_manual(values = c("#DEEBF7","#2171B5","#034E7B")) +
      theme_classic() +
      xlab('Tratamentos') +
      ylab('Espermatozoides - Cabeça Solta')
    

    【讨论】:

    • 谢谢@AllanCameron。但是我怎样才能做出这种改变呢?我是 ggplot2 的外行,想使用 boxplot 函数制作如下图
    • @BrenoG。我不明白 - 我已经向您展示了如何在 ggplot 中制作与您在 boxplot 中制作的相同的情节。如果您复制并粘贴我的代码,您将得到相同的结果。这不是您要找的吗?
    • 我希望图表看起来像“箱线图”函数,只有一半的图表出现。这不能纠正吗?
    猜你喜欢
    • 2018-08-06
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多