gpt4 book ai didi

r - 如何按中位数对分面箱线图进行正确排序?

转载 作者:行者123 更新时间:2023-12-03 18:46:24 25 4
gpt4 key购买 nike

我正在使用 R 附带的“钻石”数据集。当尝试根据价格中位数对“颜色”因素进行排序时,它不起作用。

这是我得到的:

ggplot(diamonds, aes(x = reorder(color, -price, FUN=median), y = price)) + 
geom_boxplot() +
facet_wrap(~cut) +
ylim(0, 5500)

它给了我(根本没有排序):
enter image description here

我做错了什么或遗漏了什么?

最佳答案

这是使用两个可用的辅助函数来实现所请求的安排的相对简单的方法 here

reorder_within <- function(x, by, within, fun = mean, sep = "___", ...) {
new_x <- paste(x, within, sep = sep)
stats::reorder(new_x, by, FUN = fun)
}


scale_x_reordered <- function(..., sep = "___") {
reg <- paste0(sep, ".+$")
ggplot2::scale_x_discrete(labels = function(x) gsub(reg, "", x), ...)
}

library(tidyverse)
data(diamonds)

p <- ggplot(diamonds, aes(x = reorder_within(color, price, cut, median), y = price)) +
geom_boxplot(width = 5) +
scale_x_reordered()+
facet_wrap(~cut, scales = "free_x")

enter image description here

使用 ylim(0, 5500)将删除大部分数据,导致不同的箱线图会干扰任何以前定义的顺序。如果您希望限制轴而不这样做,最好使用:
p + coord_cartesian(ylim = c(0, 5500))

这导致:

enter image description here

如果您真的打算删除大部分数据并保留排列,请在绘图之前过滤数据:
diamonds %>%
filter(price < 5500) %>%
ggplot(aes(x = reorder_within(color, price, cut, median), y = price)) +
geom_boxplot(width = 5) +
scale_x_reordered()+
facet_wrap(~cut, scales = "free_x")

enter image description here

关于r - 如何按中位数对分面箱线图进行正确排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47090344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com