我有每个站点的计数(对应一个国家),每个站点属于一个区域。数据如下所示:
> 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)
但这不符合我上面设置的最后两个要求(我特别不想使用fill来表示区域)。我开始沿着geom_rect()的路径但是不了解离散x值的坐标系而不是连续的(我确实找到了连续的Stackoverflow问题/答案,但没有看到如何转换为此)。我认为在列后面设置阴影矩形可能是最好的方法,但我会欣赏一般方法中的任何输入以及如何将它拉下来。
您可以考虑为每个区域定义一个新面板,以使用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")