我进行了两次实验,其中一些复制了前一组的条件。我有一个唯一批次ID的列以及另一个包含实验1的ID的列,实验2的批次复制。以下是一些存储的示例数据:
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。
我希望并排var2
的A和来自var2
的B.是使用facet_grid
还是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
我可以使用facetting;我大多都在问这个问题,因为当我无法将我的预期分组时,我感到很惊讶。我还查看了geom_bar()
的示例中的更多分组方法,但似乎大多数人并没有这样分组。
随意提供有关如何处理此问题的其他意见。我只是想比较一对测试结果,以便轻松查看复制是否与原始试验相符。
答案 0 :(得分: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的评论
或者您可以使用正确顺序创建适当排序的因子,或(无序)因子。
ordered
因子中)。
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))