【发布时间】:2016-03-04 21:19:34
【问题描述】:
更新:与Order Bars in ggplot2 bar graph 中回答的问题相比,我不直观的主要区别是根据 ggplot2 计算的中位数分别重新排序每个面板的类型,同时保留配色方案。
在下面的数据集中,不同的处理在计算它们的中值时可能会沿 x 轴显示不同的类型排列。
我正在尝试绘制一个图表,显示类型的中值在以升序中值排列时如何交换位置
首先,我将所有不同的处理方法绘制到带有箱线图的单独面板中,此外,我让 ggplot2 为这些类型分配调色板。
这将生成我拥有的数据集的模型。
df = data.frame(
type = rep(c
(
"piece",
"work",
"man",
"noble",
"reason",
"infinite",
"faculty",
"form",
"moving",
"express",
"admirable",
"action",
"apprehension",
"god",
"beauty",
"world",
"paragon",
"animals"
), 52),
treatment = sample(x=c("alpha", "beta", "charlie", "delta"), 234, replace = T),
value = abs(rnorm(936, 0.5, 1))
)
这段代码将生成我正在寻找的图表
ggplot(
data=df,
aes(x = type, y = value, fill = type)) +
geom_boxplot() +
xlab("Soliloquy of Man") +
ylab("Value")+
facet_wrap(~treatment, ncol = 2) +
theme(axis.text.x = element_blank(),
panel.background = element_blank(),
panel.border = element_rect(colour = "black", fill=NA))
我想做的是
- 对每个单独面板中的所有性状重新排序,使中值沿 x 轴增加,
- 为每种特定类型使用相同的调色板,
- 对于左上角的第一个面板,将颜色固定为每种类型,使其看起来像是从色谱的一端到另一端的平滑过渡。
这将允许我检查并直观地显示类型是否参考第一个面板交换了位置,然后我将运行非参数等级测试。
【问题讨论】:
-
你只需要
reorder你的因素。这是一个 r-faq。参见,例如,Alex 在此处的回答:stackoverflow.com/a/9231857/903061。代替长度,您可以使用中值作为排序函数。 -
我试过了,但我无法为我的具体情况找到正确的语法。
-
@Gregor 但是
aes(x = reorder(type, value, median)...不会考虑这些方面,不是吗? -
嗯,我太仓促了。我错过了方面部分的不同轴顺序。我的猜测是这不可能使用刻面,但您可以单独构建每个图并将它们与
grid.arrange粘贴在一起。 -
@Gregor。是的,我确实这样做了,尽管 ggplot2 的选项和功能的深度还没有让我失望,我真的不想使用笨拙的解决方案,即单独子集和绘制数据。希望有一个其他人可能想到的优雅的解决方案。