在分组条形图中绘制连接各个数据点的线 - ggplot

问题描述 投票:0回答:1

我有一个分组条形图(两个条件,每个条件有两组)。 我在创建组条形图时没有遇到问题,但我有兴趣将各个数据点放在图上并用一条线将它们连接起来。 更具体地说,这些线应该在条件内连接,因此条件 1 组 1 中的数据点连接到条件 1 组 2 中的相应数据点。如果不使用facet_wrap,我找不到方法来做到这一点。

我已经看到这里建议使用facet_wrap,但是当专门使用拼凑时,它会影响绘图的对齐。 我提供了一些条形图的代码和生成facet_wrap图的代码。

我愿意接受任何不使用facet_wrap的建议。 我希望有一种方法可以直接使用

geom_line(aes(subject))
来完成此操作,但这似乎没有正确分组。

代码

df <- data.frame(   
    Subject = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3),   
    Condition = c(“A”, “A”, “B”, “B”, “A”, “A”, “B”, “B”, “A”, “A”, “B”, “B”),   
    Group = c(“group1”, “group2", “group1”, “group2",                
              “group1”, “group2", “group1”, “group2",                
              “group1”, “group2", “group1”, “group2"),   
    Value = c(10, 7, 8, 9, 11, 12, 13, 2, 2, 3, 4, 5))

所需的外观(不包括连接的数据点)

ggplot(df, aes(x=Condition, y=Value, fill=Group)) +   
    stat_summary(fun.data = mean_sdl, geom = ‘bar’, position = ‘dodge’) +   
    stat_summary(fun.data = mean_se, geom = ‘errorbar’, width = 0.2, 
                 position = position_dodge(width = 0.9)) +   
    theme_minimal()

enter image description here

连接的数据点(使用不需要的方面)

ggplot(df, aes(x=Group, y=Value, fill=Group)) +   
    stat_summary(fun.data = mean_sdl, geom = ‘bar’, position = ‘dodge’) +   
    stat_summary(fun.data = mean_se, geom = ‘errorbar’, width = 0.2, 
                 position = position_dodge(width = 0.9)) +   
    theme_minimal() +   
    geom_line(aes(group = Subject), alpha = 0.2, position = position_nudge(c(.14, -.14))) +
    facet_wrap(~Condition)

enter image description here

以下是小面如何影响拼接中对齐的示例(右图)。因为它假设应该有一个轴标题,所以一切都未对齐。

enter image description here

ggplot2 geom-bar facet-wrap line-plot patchwork
1个回答
0
投票

您在

geom_line()
中的群体审美需要结合
Subject
Condition
信息,才能在不分面的情况下发挥作用。尝试以下解决方案(我还反转了
position_nudge()
调用中的符号,因为它们实际上反转了您的数据点,并且添加了参数
nudgeAmount
来轻松控制微移和
geom_point()
调用,以便您可以看到实际数据点在哪里):

nudgeAmount <- 0.14
ggplot(df, aes(x = Condition, y = Value, fill = Group)) +   
    stat_summary(fun.data = mean_sdl, geom = "bar", position = "dodge") +   
    stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.2, position = position_dodge(width = 0.9)) +
    geom_point(shape = 21, position = position_nudge(nudgeAmount*c(-1,1))) +
    geom_line(aes(group = paste(Subject,Condition)), alpha = 0.2, position = position_nudge(nudgeAmount*c(-1,1))) +
    theme_minimal()
© www.soinside.com 2019 - 2024. All rights reserved.