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

如何在R中标准化热力图的颜色填充值范围

解决统一颜色刻度的方法

核心问题是你每次只筛选单一年份的数据绘图,scale_fill_viridis_c默认会根据当前子集的IR值范围生成颜色映射,导致各年份刻度不统一。要实现标准化刻度,关键是基于整个数据集的IR极值固定颜色范围,具体操作如下:

步骤1:预先计算全局的IR极值

先从完整数据集中获取所有年份IR的最小值和最大值,作为统一的刻度范围:

# 计算全局IR的最小/最大值(忽略NA值)
global_ir_range <- range(joined_shapefile_postcode$IR, na.rm = TRUE)

步骤2:修改绘图代码,固定颜色范围

在scale_fill_viridis_c中添加limits参数传入全局范围,同时保留breaks参数控制刻度显示——注意breaks只是定义刻度位置,limits才是真正约束颜色映射的取值范围:

# 绘制2019年地图(刻度统一)
map_lphu_aus <- joined_shapefile_postcode %>%
  dplyr::filter(EVENT_YEAR == 2019) %>%
  ggplot() +
  geom_sf(aes(fill = IR, geometry = geometry)) +
  scale_fill_viridis_c(option = "plasma", 
                       limits = global_ir_range,
                       breaks = breaks) +
  labs(fill = "Incidence Rate per 100,000", 
       title = "2019", 
       subtitle = "Hepatitis C -Unspecified") +
  theme_minimal() +
  theme(axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank())

map_lphu_aus

进阶:批量生成所有年份的地图

如果要快速生成20年的所有地图,可以封装成函数避免重复代码:

# 定义通用绘图函数
plot_year_map <- function(target_year) {
  joined_shapefile_postcode %>%
    dplyr::filter(EVENT_YEAR == target_year) %>%
    ggplot() +
    geom_sf(aes(fill = IR, geometry = geometry)) +
    scale_fill_viridis_c(option = "plasma", 
                         limits = global_ir_range,
                         breaks = breaks) +
    labs(fill = "Incidence Rate per 100,000", 
         title = as.character(target_year), 
         subtitle = "Hepatitis C -Unspecified") +
    theme_minimal() +
    theme(axis.text.x = element_blank(),
          axis.text.y = element_blank(),
          axis.ticks = element_blank(),
          panel.grid = element_blank())
}

# 调用函数生成对应年份地图
plot_year_map(2010)
plot_year_map(2019)

这样所有年份的地图都会使用相同的颜色刻度范围,不同年份的发病率变化对比会更直观准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:12:19