ggplot颜色映射问题:如何基于另一变量梯度填充当前变量?
解决:基于另一变量范围标准化地图颜色刻度
你的核心需求是让地图的颜色刻度基于Real Wage 2的数值范围,同时用Real Wage 1填充区域。之前的geom_blank用法错误,因为它必须通过aes()指定映射关系,不能直接传入向量。
方法一:手动指定颜色刻度范围(推荐)
直接在scale_fill_gradientn中添加limits参数,用Real Wage 2的极值来限定刻度范围,无需额外图层,更简洁:
right_join(shapefiles, dataset, by = "COD_PROV") %>% ggplot(aes(fill = `Real Wage 1`)) + geom_sf() + theme_void() + theme(legend.title=element_blank(), legend.key.size = unit(1, 'cm'), legend.text = element_text(size=15))+ scale_fill_gradientn( colors = c("#FFFFFF","#FFFF00", "#FF0000", "#000000"), limits = range(dataset$`Real Wage 2`, na.rm = TRUE) )
方法二:正确使用geom_blank
如果坚持用geom_blank,需要明确指定数据集和对应的fill映射,让ggplot将Real Wage 2的范围纳入刻度计算:
right_join(shapefiles, dataset, by = "COD_PROV") %>% ggplot(aes(fill = `Real Wage 1`)) + geom_sf() + geom_blank(data = dataset, aes(fill = `Real Wage 2`)) + theme_void() + theme(legend.title=element_blank(), legend.key.size = unit(1, 'cm'), legend.text = element_text(size=15))+ scale_fill_gradientn(colors = c("#FFFFFF","#FFFF00", "#FF0000", "#000000"))
两种方法都能实现你的需求:保持原有颜色梯度,让Real Wage 1的填充基于Real Wage 2的数值范围生成的刻度。
内容的提问来源于stack exchange,提问作者io_boh
相关产品推荐
相关产品推荐

