【问题标题】:Fix the ordering of overlaid geom_bar and position_identity() in ggplot修复 ggplot 中叠加的 geom_bar 和 position_identity() 的顺序
【发布时间】:2019-07-29 21:03:46
【问题描述】:

关于 stacked geom_bar() 图表的排序有几个问题。然而,我有一个问题,我需要覆盖条形图,但由于某种原因,排序使得底层被最顶层隐藏。考虑这个例子:

df_example = data.frame(Month = rep(c(1:8),2),
                    Type = c(rep("Email",8),rep("SMS",8)),
                    Notifications = c(4,7,9,11,13,17,19,20,2,4,4,3,3,3,4,4))

然后我使用 ggplot2 和 geom_bar() 进行绘图

ggplot(data=df_example,aes(x=Type, y=Notifications, fill=Type, color=Type))+
geom_bar(stat="identity",position ="identity", color= "black",alpha=0.5)+
coord_flip()

得到这个:

问题在于覆盖“隐藏”了较低层。理想情况下,我希望每个部分都定义明确,并用黑色轮廓划定。我真的无法得到这个,它困扰着我。我正在尝试重新创建这样的东西:

请注意,这是在绘画中完成的,因此数字不会排列 - 但视觉想法就在那里。

对于这个 ggplot 问题的任何帮助将不胜感激。

【问题讨论】:

  • 很公平,我可以这样做 - 但我希望颜色是纯色。我理论上可以输入alpha = 0,然后在不同的程序上进行编辑。但这似乎很麻烦

标签: r ggplot2 geom-bar


【解决方案1】:

你可以试试这个:添加一个行号,按类型分组,然后用它来填充每种颜色并堆叠条形。然后您可以编辑颜色并删除图例。

df %>% group_by(Type) %>% mutate(r=factor(seq(1,n()))) %>% 
  ggplot(aes(x=Type, y=Notifications))+
  geom_bar(aes(fill=r),stat="identity",position = 'stack', color= "black") +
  scale_fill_manual(values=c(rep('lightblue',8))) +
  theme(legend.position = 'none')

更新

您的叠加想法不会完美运行,因为您有重复的通知值。见下文——首先通过通知排列数据然后绘图实现纯色叠加,但隐藏了存在重复的事实(而堆叠条显示了这一点)。

df %>% arrange(Type,-Notifications) %>% 
  ggplot(.,aes(x=Type, y=Notifications))+
  geom_bar(aes(fill='Type'),stat="identity",position ="identity", color= "black") +
  scale_fill_manual(values=c(rep('lightblue',16)))

【讨论】:

  • 所以,不幸的是,这只适用于你有position = 'stack'。我需要在哪里使用position = "identity"position = 'stack' 为通知提供了额外的数量。这是不正确的,因为它看起来像是在 8 个月后通过电子邮件收到了 100 条通知。
  • 我不认为您的叠加想法更合适,因为它隐藏了一些数据(即重复的通知值)。查看更新。
  • 没关系。我不介意是否有一些重叠。您的更新有效。是否真的只是添加了arrange 才有所作为:/。但是,是的,我很乐意接受作为答案
  • 是的,只需添加arrange 调用即可。谢谢。
猜你喜欢
  • 2019-10-22
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
相关资源
最近更新 更多