我正在绘制每个主题对两个块(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)
我希望这是有道理的,这可行吗?任何帮助表示赞赏!
我认为最好的方法是使用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)
通过查看此处的其他答案,我可能误解了,但我认为无论如何这可能是一个更清晰的表示:
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)
实现所需绘图的一种方法是使用facet_wrapby block、 map cononx和subjon 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)

这个答案与 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)
然后我们可以跨块(方面)比较四个主题。