【问题标题】:Lines connecting jittered points - dodging by multiple groups连接抖动点的线 - 多组躲避
【发布时间】:2017-06-20 14:47:15
【问题描述】:

我尝试在 x 轴上连接来自两种不同方法 (measure) 的测量值之间的抖动点。这些测量值通过先证者 (a) 相互关联,可分为两大类,患者 (pat) 和对照 (ctr em>), 我的df是这样的:

set.seed(1)
df <- data.frame(a = rep(paste0("id", "_", 1:20), each = 2),
                 value = sample(1:10, 40, rep = TRUE),
                 measure = rep(c("a", "b"), 20), group = rep(c("pat", "ctr"), each = 2,10))

我试过了

library(ggplot2)
ggplot(df,aes(measure, value, fill = group)) + 
  geom_point(position = position_jitterdodge(jitter.width = 0.1, jitter.height = 0.1,
                                             dodge.width = 0.75), shape = 1) +
  geom_line(aes(group = a), position = position_dodge(0.75))

reprex package (v0.3.0) 于 2020 年 1 月 13 日创建

我使用fill 美学来区分两组抖动的点(patctr)。我意识到,当我将 group = a 美学放入 ggplot 主调用时,它并没有很好地分离,但似乎更好地链接到点。

我的问题:有没有办法更好地将线连接到(抖动的)点,但保持两个主要组 ctrpat 的分离?

非常感谢。

【问题讨论】:

  • This question 似乎密切相关。其中一个答案显示了如何手动抖动点。
  • 感谢您的快速回答。不幸的是,这个建议帖子的两个答案都不适用于我的问题,因为这两个答案都没有将行分成两个主要组(ctr 和 pat)
  • This answer 通过interaction 展示了另一种方法。缺点是它会在您的特定情况下改变您的轴。我能想到的唯一其他选择是手动躲避和抖动数据。

标签: r ggplot2 jitter


【解决方案1】:

您遇到的最大问题是您仅通过group 躲避点,但线也被a 躲避。

要使您的线与轴保持原样,一种选择是手动躲避您的数据。这利用了幕后的整数因子,将group 的一层向右移动,另一层向左移动。

df = transform(df, dmeasure = ifelse(group == "ctr", 
                                     as.numeric(measure) - .25,
                                     as.numeric(measure) + .25 ) )

然后您可以使用measure 作为 x 轴进行绘图,然后在 geom_pointgeom_line 中使用“dodged”变量作为 x 轴变量。

ggplot(df, aes(x = measure, y = value) ) +
     geom_blank() +
     geom_point( aes(x = dmeasure), shape = 1 ) +
     geom_line( aes(group = a, x = dmeasure) )

如果您还想要抖动,也可以手动将其添加到 x 和 y 变量中。

df = transform(df, dmeasure = ifelse(group == "ctr", 
                                     jitter(as.numeric(measure) - .25, .1),
                                     jitter(as.numeric(measure) + .25, .1) ),
               jvalue = jitter(value, amount = .1) )

ggplot(df, aes(x = measure, y = jvalue) ) +
     geom_blank() +
     geom_point( aes(x = dmeasure), shape = 1 ) +
     geom_line( aes(group = a, x = dmeasure) )

【讨论】:

  • 这正是我想要的。干杯!
猜你喜欢
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
相关资源
最近更新 更多