在 ggplot2 中添加新几何作为新行,防止绘图分层

Add new geom as new row in ggplot2, preventing layering of plots

我很确定这很容易做到,但我似乎找不到将此问题查询到 google 或堆栈中的正确方法,所以我们在这里:

我在 ggplot2 中绘制了一个图,它利用 geom_jitter(),有效地为因子中的每个元素创建一行并绘制其值。 我想在情节中添加一个补充 geom_violin(),但只是将额外的 geom_ 函数添加到情节代码 returns 两层:jitterviolin,一个在另一个之上(正如通常预期的那样)。

编辑:

剧情是这样的: 如何将 violin 作为单独的行,而不生成第二个图? 支线任务:如何让 jitterviolin geoms 交错? (即元素 A 抖动行后跟元素 A 小提琴行,然后元素 B 抖动行后跟元素 B 小提琴行)

这是制作它所需的最少代码(没有所有 theme() 修饰):

P1 <- ggplot(data=TEST_STACK_SUB, aes(x=E, y=C, col=A)) + 
theme(... , aspect.ratio=0.3) + 
geom_point(position = position_jitter(w = 0.30, h = 0), alpha=0.2, size=0.5) +
geom_violin(data=TEST_STACK_SUB, mapping=aes(x=E, y=C), position="dodge") +
scale_x_discrete() +
scale_y_continuous(limits=c(0,1), breaks=seq(0,1,0.1), 
                  labels=c(seq(0,1,0.1))) + 
scale_color_gradient2(breaks=seq(0,100,20), 
                      limits=c(0,100), 
                      low="green3",
                      high="darkorchid4",
                      midpoint=50,
                      name="") +
coord_flip()

options(repr.plot.width=8, repr.plot.height=2)
plot(P1)

这里是生成它的数据子集(供您尝试): data

如何将你的因子作为一个连续变量来操纵,并像这样在 aes() 调用中微调条目:

library(dplyr)
library(ggplot2)

set.seed(42)

tibble(x = rep(c(1, 3), each = 10), 
       y = c(rnorm(10, 2), rnorm(10))) -> plot_data

ggplot(plot_data) + 
  geom_jitter(aes(x = x - 0.5, y = y), width = 0.25) + 
  geom_violin(aes(x = x + 0.5, y = y, group = x), width = 0.5) + 
  coord_flip() + 
  labs(x = "x") + 
  scale_x_continuous(breaks = c(1, 3), 
                     labels = paste("Level", 1:2), 
                     trans = scales::reverse_trans())