【问题标题】:Displaying similar bars together in ggplot在ggplot中一起显示相似的条
【发布时间】:2018-02-19 17:37:22
【问题描述】:

我对每个站点(对应于一个国家/地区)都有一个计数,每个站点都属于一个区域。数据如下所示:

> summary_data
     Site Count   Region
1    Chad     5   Africa
2  Angola     1   Africa
3  France    10   Europe
4     USA     6 Americas
5 Bolivia     3 Americas
6   Chile     4 Americas

我想生成一个条形图:

  • 每个国家都有一个酒吧
  • 一个区域的条形在条形图中都彼此相邻
  • 每个区域,条形按降序显示
  • 条形的宽度相同,但高度的比例相同
  • 可以一概而论(特别是:任意地区,每个地区的任意国家)
  • 我不想用填充颜色来表示区域(我想最终用颜色来表示另一个特征)
  • 我想要一些视觉表示来对列进行分组。例如,美洲地区的所有列后面都有灰色背景,非洲地区的所有列后面都有蓝色背景,等等)。实际上,我对其他方法持开放态度(也许是一条跨越整个非洲的顶部线,以“非洲”作为标签或其他东西)。

显然,每个地区可以有不同数量的国家/地区站点,并且没有国家/地区站点跨越两个地区(我尝试使用构面,但很快意识到这不是正确的路线)。我还尝试遍历所有区域以生成每个区域的单独图表,然后将它们放在一起,但这似乎也不是正确的方法。

我已经生成了一个这样的图表(我得到的最接近的):

使用此代码:

library("dplyr")
library(ggplot2)
sorted <- arrange(summary_data,Region,-Count)
sorted$Site <- factor(sorted$Site, levels = sorted$Site)
bar = ggplot(sorted,
   aes(
     x = Site,
     y = Count,
     fill = Region
   )) +  
  geom_col()
print(bar)

但这不符合我上面设置的最后两个要求(我特地不想用填充来表示区域)。我开始使用 geom_rect() 的路径,但不了解离散 x 值而不是连续的坐标系(我确实找到了关于连续的 Stackoverflow 问题/答案,但没有看到如何转换为这个)。我认为在列后面有阴影矩形可能是最好的方法,但我会很感激任何一般方法的输入以及如何将它拉下来。

【问题讨论】:

  • 您可以使用ggplot(sorted, aes(x = Region, y = Count, fill = Site)) + geom_bar(position = "dodge", stat = "identity"),它会按Region 为您提供分组列。此外,您可以按您想要的任何比例填充条形,只需将国家名称作为geom_text() 添加到绘图中。
  • 谢谢@Steven。我以这种方式得到不同宽度的列。每个区域的宽度相同,但列适合该标准宽度(因此只有一个站点的欧洲获得全宽度,而美洲获得相同宽度的三列)。有没有办法使用这种方法强制一致的条宽?再次感谢。
  • @DavidHobbs 您已经指出以下答案是您想要的解决方案。您还可以通过单击上箭头来表明它正在“增加价值”,从而为帮助您的人带来更多功劳。 由你决定,我只是想指出这种可能性。在某些情况下,两者之间的差异是相关的。在这种情况下,您的评论 This is perfect! 似乎表明您可能希望同时授予这两种奖励。

标签: r ggplot2


【解决方案1】:

您可以考虑为每个区域定义一个新面板,以使用facet_grid 将它们分开。如果您希望颜色相同,只需删除 geom_bar 中的 aes(fill = Site) 参数即可。

参数space = "free_x" 确保条的宽度相同,并且scale = free 仅显示与特定区域相对应的那些轴值。

ggplot(sorted, aes(x = Site, y = Count)) +
   geom_bar(position = "dodge", stat = "identity", aes(fill = Site)) + 
   facet_grid(. ~ Region,scale="free",  space="free_x")

【讨论】:

  • 这太完美了! space = "free_x" 和 scale = "free" 的组合可以解决问题。谢谢。
  • 很高兴它有帮助!
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2019-01-01
  • 1970-01-01
  • 2022-08-20
相关资源
最近更新 更多