并排小提琴曲线多次迭代

时间:2017-08-10 19:33:29

标签: r ggplot2

这是我的数据

set.seed(42)
dat = data.frame(iter = rep(1:3, each = 10),
                 variable = rep(rep(letters[1:2], each = 5), 3),
                 value = rnorm(30))

我知道我可以用ab

绘制小提琴图
library(ggplot2)
ggplot(data = dat, aes (x = variable, y = value)) + geom_violin()

enter image description here

但是,我如何为ab的每次迭代绘制小提琴图,以便在a的三个图旁边有b的三个图。我以前使用基本情节完成了它,但我正在寻找更好的解决方案,因为迭代次数以及'a'和'b'的数量不断变化。

2 个答案:

答案 0 :(得分:3)

有两种可能的方法。一种是通过添加填充命令,另一种是使用facet_wrap(或facet_grid

填充: ggplot(data = dat, aes (x = variable, y = value, fill = as.factor(iter))) + geom_violin(position = "dodge")

enter image description here

或使用facet_wrapggplot(data = dat, aes (x = as.factor(iter), y = value)) + geom_violin(position = "dodge") + facet_wrap(~variable) enter image description here

答案 1 :(得分:1)

也许有更好的方法,但在这种情况下,我通常会创建一个新的变量:

set.seed(42)
dat = data.frame(iter = rep(1:3, each = 10),
                 variable = rep(rep(letters[1:2], each = 5), 3),
                 value = rnorm(30))



dat <- dat %>% mutate(x_axis = as.factor(as.numeric(factor(variable))*100 + 10*iter))


levels(dat$x_axis)<- c("a1", "a", "a3", "b2", "b", "b3")



ggplot(data = dat, 
       aes(x = x_axis, 
            y = value, fill =variable)) + geom_violin() + scale_x_discrete(breaks = c("a","b"))

结果是:

enter image description here