根据中值对箱线图进行排序
Posted
技术标签:
【中文标题】根据中值对箱线图进行排序【英文标题】:Sorting a boxplot based on median value 【发布时间】:2011-04-15 12:32:33 【问题描述】:我想使用 R 制作一系列按中值排序的箱线图。假设然后我执行:
boxplot(cost ~ type)
这会给我一些箱线图,成本显示在 y 轴上,类型类别显示在 x 轴上:
----- -----
| |
[ ] |
| [ ]
| |
----- -----
A B
但是,我想要的是按中值从最高到最低排序的箱线图数字。我的怀疑是,我需要做的是更改类型(A 或 B)的标签,以数字方式指示哪个是最低和最高中值,但我想知道是否有更聪明的方法来解决这个问题。
【问题讨论】:
【参考方案1】:查看?reorder
。该示例似乎是您想要的,但以相反的顺序排序。我将下面第一行中的-count
更改为按您想要的顺序排序。
bymedian <- with(InsectSprays, reorder(spray, -count, median))
boxplot(count ~ bymedian, data = InsectSprays,
xlab = "Type of spray", ylab = "Insect count",
main = "InsectSprays data", varwidth = TRUE,
col = "lightgray")
【讨论】:
【参考方案2】:是的,就是这样:
> set.seed(42) # fix seed
> DF <- data.frame(type=sample(LETTERS[1:5], 100, replace=TRUE),
+ cost=rnorm(100))
>
> boxplot(cost ~ type, data=DF) # not ordered by median
>
> # compute index of ordered 'cost factor' and reassign
> oind <- order(as.numeric(by(DF$cost, DF$type, median)))
> DF$type <- ordered(DF$type, levels=levels(DF$type)[oind])
>
> boxplot(cost ~ type, data=DF) # now it is ordered by median
【讨论】:
你能看看我的问题吗? ***.com/questions/65547448/… 谢谢!【参考方案3】:当心缺失值,您必须添加 na.rm = TRUE
才能使其正常工作。如果没有,代码根本不起作用。我花了几个小时才发现这一点。
bymedian <- with(InsectSprays, reorder(spray, -count, median, **na.rm = TRUE**)
boxplot(count ~ bymedian, data = InsectSprays,
xlab = "Type of spray", ylab = "Insect count",
main = "InsectSprays data", varwidth = TRUE,
col = "lightgray")
【讨论】:
您应该指定这是指Joshua Ulrich's answer。它实际上应该是一个评论,但它也可以作为一个单独的答案独立存在。 我将其标记为“不是答案”,因为已发布(并接受)完全相同的答案。用户刚刚添加了新参数。这不会提高解决方案的质量,也不足以成为单独的答案。以上是关于根据中值对箱线图进行排序的主要内容,如果未能解决你的问题,请参考以下文章