在 ggplot2 中将意大利面条图(带有分组变量)与拆分小提琴(没有它)结合起来
Combine spaghetti plot (with a grouping variable) with split-violins (without it) in ggplot2
这是一个最小的可重现示例:
library(ggplot2)
mydata <- data.frame(condition = c(rep("One",40), rep("Two",40)),
participant = rep(1:40,2),
observation = c(rnorm(40,2,1), rnorm(40,0,1)))
#my.plot <- ggplot(mydata, aes(x=condition, y=observation, group=participant)) +
my.plot <- ggplot(mydata, aes(x=condition, y=observation)) +
geom_point(size=3) +
geom_line(size=1, alpha=0.5) +
xlab('condition') +
ylab('Observation')
dataDensity <- mydata %>%
group_by(condition) %>%
do(data.frame(loc = density(.$observation)$x,
dens = density(.$observation)$y,
participant=1))
dataDensity$dens <- ifelse(dataDensity$condition == "One", .9+(dataDensity$dens * -1), 2.1+(dataDensity$dens))
my.plot + geom_polygon(data = dataDensity, aes(dens, loc, fill = condition))
这给了我以下情节:
这接近我想要的,但不完全是。我实际上想在条件 "One" 和 "Two" 之间对每个对应的点进行分组。因此,当我添加分组变量时(就像我对上面代码段中注释掉的行所做的那样),我遇到了这个问题:
这很有趣,但不是我想要的。
我必须添加 hack/workaround participant=1
以防止错误消息:
Error in FUN(X[[i]], ...) : object 'participant' not found
如何将分散的点与分组变量结合起来,同时保持分离的小提琴独立?
(注意:第一个图中的垂直线只是因为我有 geom_line)
一种解决方案是将 group
美学仅限于 geom_line
层。当您在父 ggplot()
调用中提供美学映射时,所有其他图层都会继承这些美学。
my.plot2 <- ggplot(mydata, aes(x=condition, y=observation)) +
geom_point(size=3) +
geom_line(aes(group=participant), size=1, alpha=0.5) +
xlab('condition') +
ylab('Observation')
my.plot2 + geom_polygon(data = dataDensity, aes(dens, loc, fill = condition))
这是一个最小的可重现示例:
library(ggplot2)
mydata <- data.frame(condition = c(rep("One",40), rep("Two",40)),
participant = rep(1:40,2),
observation = c(rnorm(40,2,1), rnorm(40,0,1)))
#my.plot <- ggplot(mydata, aes(x=condition, y=observation, group=participant)) +
my.plot <- ggplot(mydata, aes(x=condition, y=observation)) +
geom_point(size=3) +
geom_line(size=1, alpha=0.5) +
xlab('condition') +
ylab('Observation')
dataDensity <- mydata %>%
group_by(condition) %>%
do(data.frame(loc = density(.$observation)$x,
dens = density(.$observation)$y,
participant=1))
dataDensity$dens <- ifelse(dataDensity$condition == "One", .9+(dataDensity$dens * -1), 2.1+(dataDensity$dens))
my.plot + geom_polygon(data = dataDensity, aes(dens, loc, fill = condition))
这给了我以下情节:
这接近我想要的,但不完全是。我实际上想在条件 "One" 和 "Two" 之间对每个对应的点进行分组。因此,当我添加分组变量时(就像我对上面代码段中注释掉的行所做的那样),我遇到了这个问题:
这很有趣,但不是我想要的。
我必须添加 hack/workaround participant=1
以防止错误消息:
Error in FUN(X[[i]], ...) : object 'participant' not found
如何将分散的点与分组变量结合起来,同时保持分离的小提琴独立?
(注意:第一个图中的垂直线只是因为我有 geom_line)
一种解决方案是将 group
美学仅限于 geom_line
层。当您在父 ggplot()
调用中提供美学映射时,所有其他图层都会继承这些美学。
my.plot2 <- ggplot(mydata, aes(x=condition, y=observation)) +
geom_point(size=3) +
geom_line(aes(group=participant), size=1, alpha=0.5) +
xlab('condition') +
ylab('Observation')
my.plot2 + geom_polygon(data = dataDensity, aes(dens, loc, fill = condition))