R 4.0.2版本无法使用ggpattern包,求geom_sf地图图案填充替代方案
问题解答
1. ggpattern不兼容R 4.0.2的原因
ggpattern 0.2.0及以上版本要求R版本≥4.1.0,核心原因是其依赖的gridpattern包、新版ggplot2的底层图形接口都适配了R 4.1版本新增的grid设备API,R 4.0.2缺少对应支持,因此无法正常运行最新版ggpattern。如果强行安装旧版依赖,大概率会出现绘图异常、函数报错等问题。
2. 填充图案的实现方案
方案1:安装适配R 4.0.2的旧版ggpattern(适配现有ggplot代码的最优选择)
先卸载已安装的高版本ggpattern相关依赖,再安装兼容旧版本:
remove.packages(c("ggpattern", "gridpattern")) install.packages("remotes") # 安装兼容R4.0的旧版依赖 remotes::install_version("gridpattern", version = "0.1.2", repos = "http://cran.us.r-project.org") remotes::install_version("ggpattern", version = "0.1.3", repos = "http://cran.us.r-project.org")
安装完成后修改你的现有代码即可实现图案填充:
library(ggpattern) P <- ggplot(data = shpZone, aes(geometry = geometry)) + # pattern参数可调整为stripe、crosshatch、circle等类型 geom_sf_pattern(pattern = "stripe", fill = "blue", pattern_fill = "white", pattern_density = 0.3) + geom_sf_text(aes(label = ID), size = 3) P
如果需要按ID区分不同图案,把pattern参数放到aes里映射ID即可。
方案2:基于sf原生绘图实现(无需依赖ggplot扩展包)
如果不想调整ggpattern版本,可以直接用sf包自带的绘图功能实现图案填充:
library(sf) # 按ID分配不同填充图案,可选值:horizontal、vertical、crosshatch等 shpZone$plot_pattern <- c("horizontal", "vertical", "crosshatch")[as.factor(shpZone$ID)] # 绘制带图案的地图 plot(st_geometry(shpZone), col = "blue", density = 20, angle = 45, lwd = 0.5) # 叠加ID文本标注 st_text(shpZone, label = shpZone$ID, size = 0.7)
内容的提问来源于stack exchange,提问作者Sora
相关产品推荐
相关产品推荐

