【问题标题】:ggplot2: How to get dots to group with violin plots?ggplot2:如何将点与小提琴图分组?
【发布时间】:2019-12-18 01:56:23
【问题描述】:

我想绘制 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))

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

【问题讨论】:

    标签: r ggplot2 violin-plot


    【解决方案1】:

    您可能同时需要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))
    

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

    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)
    

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

    【讨论】:

    【解决方案2】:

    你的意思是这样的吗?

    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(width = NULL, height = NULL))
    

    您可以定义 x 和 y 方向的抖动程度。

    【讨论】:

    • 这很聪明,但不完全是因为它没有正确分组。我没有一个可行的例子,但几乎这些点应该在小提琴内部抖动。像这样的东西。 sthda.com/sthda/RDoc/figure/ggplot2/…
    猜你喜欢
    • 2018-01-15
    • 2016-06-13
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2018-05-19
    相关资源
    最近更新 更多