【发布时间】: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! 似乎表明您可能希望同时授予这两种奖励。