2

我进行了两次实验,其中一些复制了前一组的条件。我有一列用于唯一批次 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。

在此处输入图像描述

我想要 Avar2并排,Bvar2并排。是使用facet_gridor的唯一方法facet_wrap吗?

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

在此处输入图像描述

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

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

在此处输入图像描述

我可以使用刻面;我主要是在问这个问题,因为当我无法按预期分组时,我感到很惊讶。我还在示例中查看geom_bar()了更多分组方法,但似乎大多数人并没有以这种方式对事物进行分组。

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

4

1 回答 1

4

interaction一种使用和调整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')) 

在此处输入图像描述

编辑感谢@Andrie 的评论

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

  • ggplot2 尊重因子水平的顺序(无论是否在ordered因子中)。
  • 默认情况下, 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))

在此处输入图像描述

于 2012-08-09T01:20:09.740 回答