如何在 R 中的绘图上连接数据点(对于每个主题)?

Liz*_*zJu 11 r ggplot2

我正在绘制每个主题对两个块(A 块和 B 块)中“相同”或“不同”刺激的反应比例,这意味着每个主题都绘制了 4 个数据点。两个用于 A 块(相同和不同),两个用于 B 块(相同和不同)。也意味着有 4 行数据包含每个主题的响应比例。

我想将每个主题的“相同”和“不同”数据点与块内的一条线连接起来(例如,“相同”的数据点和“不同”的数据点通过 A 块内和 B 块内的线连接每个主题的块)。

我尝试使用 geom_line() 附带的“group = subject”,但是当我只想连接每个块内的数据点时,它会连接所有主题的数据点。

testplot <- ggplot(df, aes(x=block, y=prop, shape=con, colour=con)) +
  geom_point(position=position_dodge(width=.1)) +
  xlab("Block") + ylab("Prop of responses") +
  theme_bw(base_size = 13) +
  theme(legend.position="top")
plot(testplot)
Run Code Online (Sandbox Code Playgroud)

样本数据集:

subj = c(1, 1, 2, 2, 3, 3, 4, 4, 1, 1, 2, 2, 3, 3, 4, 4)
prop = c(0.5, 0.8, 0.3, 0.7, 0.9, 0.4, 0.1, 0.5, 1, 0.5, 0.9, 0.2, 0.7, 0.4, 0.8, 0.1)
con = c("same", "same", "same", "same", "same", "same", "same", "same", "diff", "diff", "diff", "diff", "diff", "diff", "diff", "diff")
block = c("A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B")

df = data.frame(subj, prop, con, block)
Run Code Online (Sandbox Code Playgroud)

我希望这是有道理的,这可行吗?任何帮助表示赞赏!

Ian*_*ell 9

我认为最好的方法是使用facet_grid

ggplot(df, aes(x=con, y=prop, shape=con)) +
  geom_point(aes(color=con), position=position_dodge(width=.1)) +
  geom_line(aes(group = subj)) +
  facet_grid(.~block) +
  xlab("Block") + ylab("Prop of responses") +
  theme_bw(base_size = 13) +
  theme(legend.position="top")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


All*_*ron 7

通过查看此处的其他答案,我可能误解了,但我认为无论如何这可能是一个更清晰的表示:

ggplot(df, aes(factor(subj), prop)) +
  geom_point(aes(fill = con), size = 3, shape = 21) +
  geom_line(aes(group = factor(subj))) +
  facet_grid(.~block, switch = "x") +
  scale_x_discrete(expand = c(2, 2)) +
  labs(x = "Subjects within block") +
  theme_classic() +
  theme(text = element_text(size = 12),
        strip.placement = "outside",
        strip.background = element_blank(),
        panel.grid.major.y = element_line(colour = "gray90"))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


ste*_*fan 6

实现所需绘图的一种方法是使用facet_wrapby block、 map cononxsubjon group。尝试这个:

subj = c(1, 1, 2, 2, 3, 3, 4, 4, 1, 1, 2, 2, 3, 3, 4, 4)
prop = c(0.5, 0.8, 0.3, 0.7, 0.9, 0.4, 0.1, 0.5, 1, 0.5, 0.9, 0.2, 0.7, 0.4, 0.8, 0.1)
con = c("same", "same", "same", "same", "same", "same", "same", "same", "diff", "diff", "diff", "diff", "diff", "diff", "diff", "diff")
block = c("A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B")

df = data.frame(subj, prop, con, block)

library(ggplot2)

testplot <- ggplot(df, aes(x=con, y=prop, group = subj)) +
  geom_point(aes(shape=con, colour=con)) +
  geom_line() +
  xlab("Block") + ylab("Prop of responses") +
  theme_bw(base_size = 13) +
  theme(legend.position="top") +
  facet_wrap(~block, strip.position = "bottom") +
  theme(strip.placement = "outside", axis.text.x = element_blank(), axis.ticks.x = element_blank())
testplot
Run Code Online (Sandbox Code Playgroud)


Edw*_*ard 5

这个答案与 Ian Cambell 的答案非常相似,但使用颜色和形状来表示主题,因为相同/差异显示在 x 轴上,因此在图例中是多余的。由于主题易于识别,情节也与艾伦卡梅隆的情节相似。只是为了展示另一个视角。

ggplot(df, aes(x=con, y=prop, col=subj, shape=subj)) +
  geom_point() +
  geom_line(aes(group = subj)) +
  facet_grid(.~block) +
  xlab("Block") + ylab("Prop of responses") +
  theme_bw(base_size = 13) +
  theme(legend.position="top")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

然后我们可以跨块(方面)比较四个主题。