【问题标题】:Reordering within 3-factor grouped plot在 3 因子分组图中重新排序
【发布时间】:2021-04-25 05:03:02
【问题描述】:

使用 ggplot2,我尝试使用 3 个因素对数据表示进行重新排序:conditionsextime

library(ggplot2)
library(dplyr)
DF <- data.frame(value = rnorm(100, 20, sd = 0.1),
                 cond = c(rep("a",25),rep("b",25),rep("a",25),rep("b",25)),
                 sex = c(rep("M",50),rep("F",50)),
                 time = rep(c("1","2"),50)
)
ggplot(data=DF, aes( x = time,
                     y = value,
                     fill = cond,
                     colour = sex,
)
) + 
  geom_boxplot(size = 1, outlier.shape = NA) +
  scale_fill_manual(values=c("#69b3a2", "#404080")) +
  scale_color_manual(values=c("grey10", "grey40")) +
  ggtitle("aF,aM,bF,bM") +
  theme(legend.position = "top")

Badly ordered plot. ggplot2 首先自动排序 condition 并交错 sex 的方式提出了问题。它默认为交错的“aF、aM、bF、bM”顺序,无论我将哪个因素分配给哪个美学。

出于分析目的,我的首选顺序是“aM,bM,aF,bF”。首先订购,然后交错条件。我试图通过将 2x2 因子分配转换为具有 4 个级别的一组来修复它,这使我可以完全控制顺序:

DF %>% mutate(grp = as.factor(paste0(cond,sex))) -> DF
level_order <- c("aM", "bM", "aF", "bF")

ggplot(data=DF, aes( x = time,
                     y = value,
                     fill = factor(grp, level=level_order),
                     colour = sex
)
) + 
  geom_boxplot(size = 1, outlier.shape = NA) +
  scale_fill_manual(values=c("#69b3a2", "#404080","#69b3a2", "#404080")) +
  scale_color_manual(values=c("grey10", "grey40", "grey40", "grey10")) +
  ggtitle("aM,bM,aF,bF") +
  theme(legend.position = "top")

Ordering OK, bad representation. 然而,像这样的人工分组有其缺点,受试者没有被分配到一个组,他们是男性/女性(不能改变)并被分配到某些条件。情节图例也不必要地混乱,它有 6 个键而不是 4 个。它并没有传达出它的 2x2 重复测量设计那么好。

我不确定我正在尝试做的事情是否有意义(我希望这不是脑残),任何帮助将不胜感激。

【问题讨论】:

  • 总是值得考虑:方面

标签: r ggplot2


【解决方案1】:

您放置美学的顺序控制其分组的优先级。因此,如果您切换fillcolour 的位置,您将得到您正在寻找的结果(即您希望先对颜色进行分组,然后再进行填充)

ggplot(data=DF, aes( x = time,
                     y = value,
                     colour = sex,
                     fill = cond)) + 
  geom_boxplot(size = 1, outlier.shape = NA) +
  scale_fill_manual(values=c("#69b3a2", "#404080")) +
  scale_color_manual(values=c("grey10", "grey40")) +
  theme(legend.position = "top")

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多