这是我的数据
set.seed(42)
dat = data.frame(iter = rep(1:3, each = 10),
variable = rep(rep(letters[1:2], each = 5), 3),
value = rnorm(30))
我知道我可以用a
和b
和
library(ggplot2)
ggplot(data = dat, aes (x = variable, y = value)) + geom_violin()
但是,我如何为a
和b
的每次迭代绘制小提琴图,以便在a
的三个图旁边有b
的三个图。我以前使用基本情节完成了它,但我正在寻找更好的解决方案,因为迭代次数以及'a'和'b'的数量不断变化。
答案 0 :(得分:3)
有两种可能的方法。一种是通过添加填充命令,另一种是使用facet_wrap
(或facet_grid
)
填充:
ggplot(data = dat, aes (x = variable, y = value, fill = as.factor(iter))) + geom_violin(position = "dodge")
或使用facet_wrap
:
ggplot(data = dat, aes (x = as.factor(iter), y = value)) + geom_violin(position = "dodge") + facet_wrap(~variable)
答案 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"))
结果是: