如何用ggplot2仅可视化特定地理区域且保留全局颜色梯度?
解决方法
核心是固定颜色映射的范围为全量数据的薪资区间,避免筛选后自动重新计算区间。具体操作步骤如下:
- 第一步:从全量数据中提取
Wage字段的最小值和最大值,作为颜色刻度的固定范围 - 第二步:筛选出需要展示的目标区域数据
- 第三步:绘制地图时,将色标函数的
limits参数设置为第一步得到的全量数据范围
代码示例
假设你的空间数据框为prov_shp,薪资数据集为wage_data,关联字段为COD_PROV:
# 1. 计算全量数据的薪资区间(忽略NA值) full_wage_range <- range(wage_data$Wage, na.rm = TRUE) # 2. 筛选目标区域并关联空间数据 filtered_map_data <- wage_data %>% inner_join(prov_shp, by = "COD_PROV") %>% filter(COD_REG >= 13) # 3. 绘制地图,固定颜色映射范围 ggplot(filtered_map_data) + geom_sf(aes(fill = Wage)) + scale_fill_gradient( low = "#e6f2ff", high = "#cc0000", limits = full_wage_range, # 关键:绑定全量数据的薪资区间 name = "薪资水平" ) + theme_void()
如果使用离散型色标(如scale_fill_binned),同样可以通过limits参数固定范围,确保筛选区域的颜色和全图保持一致。若数据中存在缺失值,记得在计算区间时保留na.rm = TRUE避免出错。
内容的提问来源于stack exchange,提问作者io_boh
相关产品推荐
相关产品推荐

