在ggplot中一起显示相似的条形图

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

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

> 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

我想生成一个条形图:

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

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

我生成了一个这样的图形(最近我得到):

enter image description here

使用此代码:

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)

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

r ggplot2
1个回答
4
投票

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

参数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")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.