我为每个站点(与国家/地区对应)有一个计数,每个站点属于一个区域。数据如下所示:
> 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问题/答案,但没有看到如何转换为此)。我认为在列后面设置阴影矩形可能是最好的方法,但我会欣赏一般方法中的任何输入以及如何将它拉下来。
答案 0 :(得分: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")