ggplot2:如何使点与小提琴图分组?

Ahd*_*dee 6 r ggplot2 violin-plot

我想绘制x轴在哪里的小提琴图,exon但是我想对这些图进行分组。如果它只是小提琴,这是可行的,但是当我由于某种原因添加抖动时,它没有响应正确aes,而是自行绘制?这是一个可复制的代码,其中包含错误的屏幕快照。谢谢!

set.seed(1)
df <- data.frame(
  exons = c(rep("e1", 200), rep("e2", 200)),
  values = rnorm(400, 200, 40),
  group = c(
    rep("g1", 75), rep("g2", 75), rep("g3", 50),
    rep("g1", 75), rep("g2", 75), rep("g3", 50)
  )
)

ggplot(df, aes(y = values, x = exons, fill = group)) +
  geom_violin() +
  geom_jitter(shape = 16, position = position_jitter(0.07))
Run Code Online (Sandbox Code Playgroud)

因此,如果绘图有效,则应该在每个外显子的每个组内绘制点,但是这里显然不是。

在此处输入图片说明

Tun*_*ung 9

你可能都想要position_dodge()并且position_jitterdodge()

library(ggplot2)
ggplot(df, aes(y = values, x = exons, fill = group)) +
  geom_violin(position = position_dodge(width = 0.9)) +
  geom_point(position = position_jitterdodge(seed = 1, dodge.width = 0.9))
Run Code Online (Sandbox Code Playgroud)

另一个值得一提的选项是包geom_quasirandom()中的函数ggbeeswarm

library(ggbeeswarm)
ggplot(df, aes(y = values, x = exons, fill = group)) +
  geom_violin(position = position_dodge(width = 0.9)) +
  geom_quasirandom(dodge.width = 0.9, varwidth = TRUE)
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2019-08-10 创建