ggplot使用geom_contour_filled搭配scale_fill_brewer无图例如何解决
图例消失原因
你代码中geom_contour_filled设置的等高线断点为zCuts*0.1,但scale_fill_brewer中传入的断点为原始zCuts,两者数值范围完全不匹配,ggplot无法将填充色映射到对应图例断点,因此不会显示图例。
修复代码
只需要统一两者的断点即可,如果你需要图例显示乘0.1后的数值,直接修改scale_fill_brewer的breaks参数:
limits = c(-1,1)*max(abs(sing2$qbo),na.rm=TRUE) zCuts <- round(seq(limits[1], limits[2], length.out = 11), digits=0) sing2 %>% ggplot() + geom_contour_filled(aes(x=date,y=hpa, z = qbo*0.1),breaks=zCuts*0.1, show.legend = TRUE) + scale_y_reverse(expand=c(0,0)) + scale_x_date(expand=c(0,0), date_breaks = '1 year', date_labels = '%Y') + # 此处breaks改为和geom一致的zCuts*0.1,palette用配色名更稳妥 scale_fill_brewer(palette = "RdBu", type='div', breaks=zCuts*0.1) + theme_bw() + theme(legend.position = 'right', axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
如果你希望图例显示原始qbo的数值(不显示乘0.1之后的结果),可以给scale_fill_brewer增加labels参数做映射:
scale_fill_brewer(palette = "RdBu", type='div', breaks=zCuts*0.1, labels = zCuts)
额外优化提示:你当前代码中对sing2做了两次赋值,第二次的赋值覆盖了第一次按1997年前后区分行计数的处理逻辑,如果需要准确对应年份数据,建议删除第二次的sing2赋值代码。
内容的提问来源于stack exchange,提问作者JFD
相关产品推荐
相关产品推荐

