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

使用ggplot2绘制世界地图:如何展示各国全部transportation_type对应的颜色分布

解决ggplot2世界地图仅显示单一交通类型的问题

问题根源

你遇到的问题主要有两个关键点:

  1. 变量名笔误:代码里定义了world1但绘图时调用了w_d1,这会导致运行错误(你能显示driving大概率是实际运行时临时修正了,但这个细节需要统一)。
  2. 核心逻辑问题:当用left_join把地图坐标数据和多交通类型的mapData连接后,同一个国家的每个地理坐标点会重复对应所有该国家的交通类型。直接用geom_polygon绘制时,同一个多边形会被多次渲染,最终只保留最后绘制的那个交通类型的颜色(也就是你看到的仅显示driving)。

最优解决方案

最清晰直观的方式是使用分面(facet),为每个交通类型单独生成一张地图,这样能完整展示每种方式的分布。如果一定要在同一张图里展示,可以用透明度叠加,但分面的可读性更强。

修改后的完整代码

library(ggplot2)
library(dplyr)
library(maps)

# 加载世界地图坐标数据
world <- map_data("world")

# 模拟你的mapData(实际使用时替换为你的数据集读取代码,比如read.csv("your_data.csv"))
mapData <- data.frame(
  region = c("Albania", "Albania", "Argentina", "Argentina", "Australia", "Australia", "Australia", "Austria"),
  transportation_type = c("driving", "walking", "driving", "walking", "driving", "transit", "walking", "driving"),
  country = c("Albania", "Albania", "Argentina", "Argentina", "Australia", "Australia", "Australia", "Austria")
)

# 正确连接地图数据与交通类型数据
world_joined <- left_join(world, mapData, by = "region")

# 使用分面展示每个交通类型的分布地图
ggplot(world_joined, aes(x = long, y = lat, group = group)) +
  geom_polygon(aes(fill = transportation_type), color = "grey") +
  # 按交通类型分面,每个类型一张图
  facet_wrap(~transportation_type) +
  # 应用罗宾逊投影,优化世界地图的视觉效果
  coord_map("robinson") +
  # 美化主题,隐藏冗余元素
  theme_minimal() +
  labs(title = "全球交通方式分布", fill = "交通类型") +
  theme(
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank()
  )

可选:单图叠加展示方案

如果需要在同一张图里展示所有交通类型,可以通过设置不同透明度叠加绘制,但注意颜色混合可能影响可读性:

ggplot(world_joined, aes(x = long, y = lat, group = group)) +
  # 按交通类型分层绘制,设置不同透明度
  geom_polygon(data = subset(world_joined, transportation_type == "driving"), 
               aes(fill = "driving"), color = "grey", alpha = 0.3) +
  geom_polygon(data = subset(world_joined, transportation_type == "walking"), 
               aes(fill = "walking"), color = "grey", alpha = 0.3) +
  geom_polygon(data = subset(world_joined, transportation_type == "transit"), 
               aes(fill = "transit"), color = "grey", alpha = 0.3) +
  # 自定义颜色映射
  scale_fill_manual(values = c("driving" = "#E69F00", "walking" = "#56B4E9", "transit" = "#009E73")) +
  coord_map("robinson") +
  theme_minimal() +
  labs(title = "全球交通方式叠加分布", fill = "交通类型") +
  theme(axis.text = element_blank(), axis.title = element_blank(), panel.grid = element_blank())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:07:32