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

如何在ggplot2的geom_line图中按Reg变量聚类同区域国家?

解决方案:按地理区域聚类国家显示

要实现同区域的国家显示在一起,核心是调整Country变量的排序,让它按照Reg分组来排列,这样ggplot绘制y轴时就会自动把同区域的国家放在一起啦。

下面是具体的实现步骤和代码:

步骤1:重新排序国家变量

我们可以把Country转换成有序因子,排序依据是Reg的分组。这里用dplyr和forcats包来处理会很方便:

# 先加载需要的包
library(dplyr)
library(forcats)
library(ggplot2)

# 对数据集进行处理:按区域排序后,把Country转成对应顺序的因子
dur_ordered <- dur %>%
  arrange(Reg) %>%  # 先按Reg字段排序,让同区域国家集中
  mutate(Country = fct_inorder(Country))  # 将Country转换为按当前顺序排列的因子

这样处理后,Country因子的水平顺序就会跟随Reg的分组逻辑,同区域的国家会连在一起排列。

步骤2:修改ggplot代码绘图

用处理好的dur_ordered数据集绘图,y轴直接用重新排序后的Country即可:

ggplot(data = dur_ordered) +
  geom_line(mapping = aes(x = Year, y = Country, color = elec.sys.fam), size = 1.1) +  # 这里注意color参数直接用列名即可,无需加dur$
  guides(colour = guide_legend(override.aes = list(size = 3))) +
  # 可选:调整y轴文字大小,避免国家名称挤在一起
  theme(axis.text.y = element_text(size = 9))

另外提个小细节:你的原始代码里color=dur$elec.sys.fam的写法不太规范,直接用列名elec.sys.fam就好,ggplot会自动从data参数指定的数据框里读取对应列。

如果你的Reg区域有自定义的排序需求(比如按大洲优先级排序),还可以先给Reg指定有序因子,这样国家的聚类顺序会更贴合你的预期:

# 示例:手动指定Reg的顺序为"非洲", "亚洲", "欧洲", "美洲"(根据你的实际区域名称调整)
dur_ordered <- dur %>%
  mutate(Reg = factor(Reg, levels = c("非洲", "亚洲", "欧洲", "美洲"))) %>%
  arrange(Reg) %>%
  mutate(Country = fct_inorder(Country))

这样处理后,区域会按照你指定的顺序排列,对应的国家也会跟着聚类显示。

内容的提问来源于stack exchange,提问作者Nathgun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:25:58