r - 是否需要使用facet_grid/wrap来按除用于填充/颜色之外的变量对箱线图进行分组?

标签 r ggplot2 boxplot

我进行了两项实验,其中一些重复了前一组的条件。我有一个用于唯一批处理 ID 的列,以及另一个包含实验 1 中的 ID 的列,实验 2 中的批处理会复制该 ID。以下是一些像这样存储的示例数据:

test <- data.frame(var1=c(rep("A",4), rep("B",4), rep("C",4), rep("D",4)),
                   var2=rep(c(rep("A",4), rep("B",4)),2),
                   value=runif(16,1,5))

这是我的 ggplot 代码:

ggplot(test, aes(x=var1, y=value, fill=var2)) + geom_boxplot()

这为我提供了根据 var1 的因子顺序排列的批处理 ID。

enter image description here

我希望将 var2 中的 A 并排放置,并将 var2 中的 B 并排放置。使用 facet_gridfacet_wrap 是唯一的方法吗?

 ggplot(test, aes(x=var1, y=value, fill=var2)) + geom_boxplot() +
        facet_grid(. ~ var2, scales="free_x")

enter image description here

我尝试添加 group=var2 但这给了我重叠且非常宽的箱线图,我也不明白:

ggplot(test, aes(x=var1, y=value, group=var2, fill=var2)) + geom_boxplot()
Warning message:
position_dodge requires non-overlapping x intervals

enter image description here

我可以使用分面;我问这个问题主要是因为当我无法按照我的预期进行分组时,我感到很惊讶。我还查看了 geom_bar() 的示例以了解更多分组方法,但似乎大多数人都不会以这种方式进行分组。

请随意提供有关如何解决此问题的其他意见。我只是想比较成对的测试结果,以便轻松查看重复试验是否与原始试验相匹配。

最佳答案

使用交互并调整scale_x_discrete标签的作弊方法

 ggplot(test, aes(x=interaction(var1,var2), y=value, fill=var2)) + 
  geom_boxplot() +
  scale_x_discrete(name = 'var1',breaks = c('A.A','C.A','B.B','D.B'), 
                   labels = c('A','C','B','D')) 

enter image description here

编辑感谢@Andrie的评论

或者您可以创建一个适当排序的因子,或(无序)因子,其级别以正确的顺序指定

  • ggplot2 尊重因子水平的顺序(无论是否在有序因子中)。
  • 默认情况下,R 会按字典顺序对级别进行排序,因此对于任何其他顺序,您需要指定它。

.

library(plyr) # for arrange 
var1_order <- unique(as.character(arrange(test,var2)[['var1']]))

test$var1_order <- ordered(test$var1, levels = var1_order)
## or
test$var1_order_2 <- factor(test$var1, levels = var1_order)
## so that 
ggplot(test, aes(x=var1_order_2, y=value, fill=var2)) + 
 geom_boxplot() + 
 xlab('var1')
## or 
ggplot(test, aes(x=var1_order, y=value, fill=var2)) + 
 geom_boxplot() + 
 xlab('var1')

两者都会给出相同的结果

编辑——另一种方法

您可以将 x 轴设置为 var2 并按 var1 填充,这将按 var2 排序,然后按 闪避并填充var1

  ggplot(test, aes(x=var2,y=value)) + 
   geom_boxplot(aes(fill = var1))

enter image description here

关于r - 是否需要使用facet_grid/wrap来按除用于填充/颜色之外的变量对箱线图进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11875397/

相关文章:

r - 如何使用等高线图和瓦片图可视化 GAM 结果(使用 ggplot2)

r - 如何在ggplot2中按日期和日期计数创建折线图

r - geom_point,手动颜色和点大小

python-3.x - Seaborn Boxplot - 轴颜色和宽度

r - 合并列表元素?

r - 根据输入 Shiny 的 iframe

r - 如何在 R 中向 ggplot 箱线图添加垂直线

r - R图中出现的奇怪线条

R 哪个语句没有正确选择字符串

r - 猫和打印有什么区别?