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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:03