当面向绘图时,重新排序由整个数据集确定,而不是在每个方面确定。基础。
这是一个非常简单的最小例子:
diamonds %>%
filter(cut=="Ideal" | cut=="Premium") %>%
filter(clarity=="VVS1" | clarity=="SI1") %>%
ggplot(., aes(x=reorder(color, price, FUN = median), y=price)) +
geom_boxplot() +
facet_wrap(~clarity, scales="free")
预期结果是具有两个方面的图,并且每个方面内的中间值按顺序排列的箱形图。事实并非如此:
现在,如果我们删除分面,结果图看起来像预期的那样:
diamonds %>%
filter(cut=="Ideal" | cut=="Premium") %>%
filter(clarity=="VVS1" | clarity=="SI1") %>%
ggplot(., aes(x=reorder(color, price, FUN = median), y=price)) +
geom_boxplot()
您会注意到颜色的顺序'在所有三个图中都是相同的,这使得我得出结论,订单由整个数据集决定,并且该订单保留在两个单独的方面中。
我们真正想要的是'颜色'每个方面订购。如何实现这一目标...更重要的是,我未能掌握的基本原则是什么导致我期待除了哈德利之外的其他事情?
P.S 我知道ggplot2尊重数据的排序,并且原则上'顺序应该由数据而不是绘图调用决定,因此正确的方法是在绘图之前通过预先操作数据对数据进行排序。这里和其他地方有几个Q& A,它们展示了如何做到这一点。
但是,还有一种情况是在ggplot命令中使用重新排序 - 例如当使用诸如' median'之类的汇总函数时,同时保留ggplot函数调用的原始数据。
此帖已被标记为重复 - 据我所知。这里的核心问题不是订购箱图,而是如何确保这是基于每个方面而不是跨方面。