【问题标题】:ggplot dropping zeros from boxplot?ggplot 从箱线图中删除零?
【发布时间】:2015-08-17 19:04:50
【问题描述】:

您好,从阅读和玩弄一些数据来看,ggplot 在绘制箱形图时可能会掉零。显然它在处理对数刻度的零时存在一些问题。当我做箱线图时,我经常收到警告。我假设的第二个是删除 NA,但第一个看起来可能会丢零

Removed x rows containing non-finite values (stat_boxplot)
Removed x rows containing missing values (stat_summary)

例如

library(ggplot2)

df = read.table(text="X1 X1.1 X1.2 X1.3 X2 X2.1 X2.2 X2.3
        1    0   3    4    3   2    3    1
        2    'NA'   5    5    5   2    1    2
        2     'NA'   2    1    2   1    2    5", header=TRUE)

dfmelt<-melt(df)

 ggplot(dfmelt, aes(variable, value, fill=variable)) +
 geom_boxplot() +
 theme(axis.text.x=element_text(angle=90))+
 scale_x_discrete(labels=c('C1','C2','C3','C4','C5','C6','C7','C8'))+
 scale_fill_manual(values=rep(c("red","green","blue","yellow"),2))+
 stat_summary(fun.y = median, geom = "point", position =     position_dodge(width = .9))+
 scale_y_log10()

我想知道这是否仅在进行对数刻度时发生?如果这可能会影响箱线图本身的定位和中位数?具有多个零和非零值的数据是否会将所有零都丢掉以移动框?如果是这样,如何最好地处理它,以免 ggplot 最终扭曲我的数据?

谢谢

【问题讨论】:

  • 您不能从0 获取log。在控制台输入log10(0),它会返回-Inf
  • 我在箱线图之前转换(记录)我的数据。似乎应该有关于删除数据的警告(在我的情况下,转换后的值已经是-Inf。我发现了这个问题,因为我的箱形图上有一个不同的“n =”。我的解决方案是在转换过程中使用log(x+1)

标签: r ggplot2 statistics


【解决方案1】:

0 未定义对数刻度,很可能 ggplot 摆脱了它们。根本无法用数学方法以对数刻度表示 0。

【讨论】:

  • 然而,对于采用整数值的系列,log(x + 1) 通常是一个合理的选择。事件计数就是一个例子。
  • 好的,但是如果你有零值和非零值的混合,如果零都被丢弃,那么盒子和中间缺口将处于错误的位置,对吗?你怎么能应付呢?我知道您不能代表零本身,但是从数据组中简单地删除所有零值并使用剩余的非零值绘制箱线图在统计上是否可以接受?这不会弄乱箱线图吗?我觉得这很奇怪,这是默认行为,没有简单的解决方法。
  • 我不会用对数刻度表示这样的系列,但如果我真的想这样做,我会使用 ulfelder 的方法,将现有数据加 1。关于箱线图的混乱,它是最不混乱的,因为 log(c(0,1, 1)) 的平均值是负无穷大。试试mean(log(c(0,1,0))),它将说明这一点。在我看来,ggplot 做了它应该做的,或者至少是最小的伤害。 :)
猜你喜欢
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
相关资源
最近更新 更多