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

如何在世界地图上叠加热力图与散点饼图?代码报错求解

问题解决:连续值传入离散尺度报错

报错原因

你的代码同时使用了连续填充尺度(对应热力图的Cases变量,用scale_fill_gradient定义)和离散填充尺度(对应散点饼图的Group1/Group2类别),而ggplot默认只允许一个填充尺度,两者冲突导致报错。

解决方案

使用ggnewscale包添加独立的填充尺度,让热力图和散点饼图的填充规则互不干扰。具体步骤:

  1. 安装并加载ggnewscale包
  2. 在绘制散点饼图前调用new_scale_fill(),开启新的填充尺度
  3. 给散点饼图的类别设置离散颜色尺度

修改后的完整代码

library(ggplot2)
library(scatterpie)
library(ggnewscale) # 新增包

world_map <- map_data("world")
df <- data.frame(Country = c("USA", "Canada", "Mexico"),
                 Cases = c(10, 20, 30))
df_piechart <- data.frame(long = c(-95, -110, -75),
                          lat = c(37, 60, 20),
                          size = c(5, 10, 15),
                          Group1 = c(20, 30, 50),
                          Group2 = c(30, 40, 30))

ggplot() +
  # 绘制基础世界地图
  geom_map(dat = world_map, map = world_map, aes(map_id = region), 
           color = "white", fill = "#d3d4d3", linewidth = 0.5, alpha=0.4 ) +
  # 绘制热力图(Cases连续变量)
  geom_map(dat = df, map = world_map, aes(map_id = Country, fill = Cases), 
           linewidth = 0.5) +
  scale_fill_gradient(low = "skyblue", high = "dodgerblue4", name = "Avian Cases") +
  # 开启新的填充尺度,用于散点饼图
  new_scale_fill() +
  # 绘制散点饼图(Group1/Group2离散类别)
  geom_scatterpie(data = df_piechart, aes(x = long, y = lat, r = size/50), # 调整r值避免饼图过大
                  cols = c("Group1", "Group2"), alpha = 0.8) +
  scale_fill_manual(values = c("Group1" = "orange", "Group2" = "darkgreen"), 
                    name = "Groups") +
  expand_limits(x = world_map$long, y = world_map$lat) +
  theme(legend.text = element_text(size = 8, family = "serif"),
        legend.title = element_text(size = 8, face = "bold", family = "serif"),
        legend.key.height = unit(0.2, 'cm'), 
        legend.key.width = unit(0.2, 'cm')) +
theme_void()

额外说明

  • 调整了geom_scatterpie的r参数(除以50),原size值过大导致饼图超出地图范围,可根据需求自行调整
  • 用scale_fill_manual给饼图的两个组设置了自定义颜色,可替换为你需要的配色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:03:12