连接抖动点的线 - 多组躲避
Lines connecting jittered points - dodging by multiple groups
我尝试在 x 轴上连接来自两种不同方法 (measure) 的测量值之间的抖动点。先证者 (a) 将这些测量结果 link 相互 link,可以分为两大组,即患者 (pat) 和控件 (ctr),
我的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
美学来将抖动的点与两组(pat 和 ctr)分开。我意识到,当我将 group = a
美学放入 ggplot
主调用时,它并没有很好地分离,但似乎 link 更好。
我的问题:有没有办法更好地将线连接到(抖动的)点,但保持两个主要组的分离,ctr 和 pat?
非常感谢。
您遇到的最大问题是您仅通过 group
躲避点,但也通过 a
躲避直线。
为了让你的线与轴保持原样,一种选择是手动躲避你的数据。这利用了引擎盖下的整数因素,将 group
的一级向右移动,另一级向左移动。
df = transform(df, dmeasure = ifelse(group == "ctr",
as.numeric(measure) - .25,
as.numeric(measure) + .25 ) )
然后您可以使用 measure
作为 x 轴绘制,然后使用 "dodged" 变量作为 geom_point
和 geom_line
中的 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) )
我尝试在 x 轴上连接来自两种不同方法 (measure) 的测量值之间的抖动点。先证者 (a) 将这些测量结果 link 相互 link,可以分为两大组,即患者 (pat) 和控件 (ctr), 我的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
美学来将抖动的点与两组(pat 和 ctr)分开。我意识到,当我将 group = a
美学放入 ggplot
主调用时,它并没有很好地分离,但似乎 link 更好。
我的问题:有没有办法更好地将线连接到(抖动的)点,但保持两个主要组的分离,ctr 和 pat?
非常感谢。
您遇到的最大问题是您仅通过 group
躲避点,但也通过 a
躲避直线。
为了让你的线与轴保持原样,一种选择是手动躲避你的数据。这利用了引擎盖下的整数因素,将 group
的一级向右移动,另一级向左移动。
df = transform(df, dmeasure = ifelse(group == "ctr",
as.numeric(measure) - .25,
as.numeric(measure) + .25 ) )
然后您可以使用 measure
作为 x 轴绘制,然后使用 "dodged" 变量作为 geom_point
和 geom_line
中的 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) )