2017-01-17 24 views
0

我想在ggplot中创建一个分组条形图,其中每个x值应该有4个条形图。这里是我的数据的子集(实际数据是约4倍以上):ggplot中的分组条形图,y值基于2个分类变量的组合?

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 

我想是图框的x值和proportion_type为y的值,但根据双方VERB_TYPE和酒吧扬声器。因此,对于每个x值(Frame),将会有4个小节组合在一起 - 每个小节用于与mental_ child,mental_parent,perception_ child,perception_parent相对应的proportion_type值。我需要基于Verb_Type的填充颜色以及基于说话者的填充“纹理”(饱和度或其他)。我做不是想要堆积的酒吧,因为它不会准确地代表数据。

我不想使用方格网格,因为我觉得在将它们分成2组时,我觉得在比较所有4个方格时很难进行比较。我想将所有的小节组合在一起,以便可视化更容易。但我无法弄清楚如何进行适当的分组。这是我可以在ggplot中做什么,还是我需要在绘图之前操作数据?我试着用融化来重塑数据,但是我做错了,或者那不是我应该做的。

回答

0

我认为您正在寻找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)) 

enter image description here

+0

这正是我一直在寻找! group = interaction()就是我需要的。谢谢。 – Ed2122

+0

另外,@Nathan Day,后续问题:我认为可以重新排序分组中的小节吗?以便每对Verb_Type条彼此相邻? – Ed2122

+0

没关系 - 要做到这一点,我只需要改变交互()中变量的顺序。 – Ed2122