ggplot2使用coord_flip时无法保留国家名称的因子顺序问题
解决ggplot2使用coord_flip()后国家顺序错乱的问题
问题根源
你之前创建country_f因子时,只调用了factor(fert$country)却没指定自定义层级,ggplot2会默认按字母顺序对因子排序,这就导致翻转坐标轴后,国家顺序完全偏离了原数据的排列。
修正步骤
创建因子时,明确指定层级为原数据中country列的首次出现顺序,用unique()提取这个顺序即可:
# 重新生成country_f因子,严格保留原数据的国家排序 fert$country_f <- factor(fert$country, levels = unique(fert$country))
修正后的完整绘图代码
ggplot(fert, aes(fill = fert_import_origin, x = country_f, y = value, label = paste0(value, "%"))) + geom_bar(stat = "identity", width = 0.7) + geom_text(size = 4, position = position_stack(vjust = 0.5), family = "Lato") + scale_y_continuous(breaks = pretty_breaks(n = 6), labels = percent_format(scale = 1)) + scale_fill_manual(values = c("#0C7BDC","#96426C"), breaks = c("Russia", "Rest of World")) + labs(x = "", y = "", title = "Fertiliser import by origin in Africa (%) | 2021", caption = paste0("Source: Trade Map, 2021\n", "Graphic: Monique Bennett")) + coord_flip()
额外说明
unique(fert$country)会按原数据中country首次出现的顺序返回唯一值,用它作为因子层级,就能保证图表里的国家顺序和原数据完全一致。- 如果之后需要手动调整排序,直接修改
levels参数的向量就行,比如levels = c("South Africa", "Uganda", "Mali", ...)。
内容的提问来源于stack exchange,提问作者Mon_mon28
相关产品推荐
相关产品推荐

