【问题标题】:Grouped bar plot in ggplot with y values based on combination of 2 categorical variables?ggplot中的分组条形图,y值基于2个分类变量的组合?
【发布时间】:2017-05-31 23:38:47
【问题描述】:

我正在尝试在 ggplot 中创建一个分组条形图,其中每个 x 值应该有 4 个条形图。这是我的数据的一个子集(实际数据大约长 4 倍):

Verb_Type,Frame,proportion_type,speaker
mental,V CP,0.209513024,Child
mental,V NP,0.138731597,Child
perception,V CP,0.017167382,Child
perception,V NP,0.387528402,Child
mental,V CP,0.437998087,Parent
mental,V NP,0.144086707,Parent
perception,V CP,0.042695836,Parent
perception,V NP,0.398376853,Parent

我想要的是将 Frame 绘制为 x 值,将 ratio_type 绘制为 y 值,但条形图基于 Verb_Type 和扬声器。因此,对于每个 x 值(帧),将有 4 个条形图组合在一起 - 每个条形图对应于mental~child、mental~parent、perception~child、perception~parent 的 ratio_type 值。我需要填充颜色基于 Verb_Type,填充“纹理”(饱和度或其他东西)基于扬声器。我确实想要堆叠条形,因为它不能准确地表示数据。

我不想使用分面网格,因为我发现将所有 4 个条分成 2 组时在视觉上很难比较它们。我想将所有的条组合在一起,以便可视化更容易。但我不知道如何进行适当的分组。这是我可以在 ggplot 中做的事情,还是我需要在绘图之前操作数据?我尝试使用 melt 来重塑数据,但要么我做错了,要么这不是我真正应该做的。

【问题讨论】:

    标签: r plot ggplot2 bar-chart


    【解决方案1】:

    我认为您正在寻找 df$Verb_Typedf$speaker 之间的 interaction()(即获取所有唯一配对)来获取您所追求的列分组。您可以将其直接传递给ggplot 或提前创建一个新变量:

    ggplot(df, aes(x = Frame, y = proportion_type,
                   group = interaction(Verb_Type, speaker), fill = Verb_Type, alpha = speaker)) +
        geom_bar(stat = "identity", position = "dodge") +
        scale_alpha_manual(values = c(.5, 1))
    

    或者:

    df$grouper <- interaction(df$Verb_Type, df$speaker)
    ggplot(df, aes(x = Frame, y = proportion_type,
                   group = grouper, fill = Verb_Type, alpha = speaker)) +
        geom_bar(stat = "identity", position = "dodge") +
        scale_alpha_manual(values = c(.5, 1))
    

    【讨论】:

    • 这正是我想要的! group = interaction() 是我需要的。谢谢。
    • 另外,@Nathan Day,一个后续问题:我认为可以重新排序分组中的条形吗?以便每对 Verb_Type 条彼此相邻?
    • 没关系 - 为此我只需要更改交互()中变量的顺序。
    • 很高兴它让你摆脱困境,我总是喜欢在 ggplot() 之外构建这些东西,所以我可以使用指定的因子水平来控制绘图顺序
    • 另外,如果答案解决了您的问题,请考虑接受它,这样我们就可以将 SO-R 上的未解决/未回答问题百分比保持在较低水平
    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 2018-12-03
    • 2017-11-29
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多