You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 13:45:54