更新后 ggpattern 中的模式不遵循多边形边界

Pattern in ggpattern doesn't follow polygon borders after update

我用 sf 包中的空间特征制作了一些地图,并使用 ggpattern 创建了条纹填充。这适用于某些多边形,但不适用于其中有洞的多边形(湖泊特征 class 中的岛屿)。

最近更新了 ggpattern 包以处理带孔的多边形(对此我很感激!),并且它不再给出这些特征的错误,但现在所有特征的图案填充都是错误的(有和没有)孔),因为它不再遵循多边形边界,而是填充多边形周围的矩形。

这是一个使用 rnaturalearth 包的示例来说明我的意思。

#devtools::install_github("coolbutuseless/ggpattern")
library(ggpattern)
library(rnaturalearth)

germany <- ne_countries(country='germany', returnclass='sf')
ggplot() + geom_sf_pattern(data = germany)

这给了我这个结果。

这里是我实际地图的图片before and after无孔多边形的 ggpattern 更新,使用未更改的代码和数据。

我查看了 ggpattern 页面,看看是否缺少需要更改的某些参数,但似乎找不到问题所在。我对 R 比较陌生,所以也许我忽略了一些东西。如果能帮我指明正确的方向,我将不胜感激!

我遇到了同样的问题。如果你继续Github,它已经报告了错误。但是,提出的解决方案对我不起作用。所以我建议你一个替代解决方案。

devtools::install_github("statnmap/HatchedPolygons")
require(HatchedPolygons)
require(rnaturalearth)
    
ger <- st_as_sf(germany)

hatch <- hatched.SpatialPolygons(ger, density = 4, angle = 45)
hatch <- hatch %>% sf::st_set_crs(st_crs(germany))

ggplot(germany) + 
  geom_sf() +
  geom_sf(data = hatch)

如果您想要特定的阴影区域,您应该首先创建所需的阴影多边形,然后将其剪裁到您的数据中,最后将其绘制为 sf 对象。

请使用 remotes::install_github(coolbutuseless/ggpattern) 将您的 {ggpattern}{gridpattern} 软件包更新到最新(开发)版本。 geom_sf_pattern() 模式 clipping/masking 存在一些问题,已于上周(2022 年 1 月 16 日至 20 日)修复。理论上它现在应该可以工作了。您不需要使用不同的 OS.

如果它仍然不起作用,请尝试一些解决方法:

  1. 使用 options(ggpattern_use_R4.1_features = FALSE) 明确关闭(或打开)R 4.1 功能。通常这不应该明确需要,因为 {gridpattern} 可以猜测活动图形设备中的 R 4.1 支持...

  2. 使用不同的图形设备(例如 pdf()ragg::agg_png() 而不是默认的交互式 windows 设备来保存图像。使用 pdf/png 查看器,当图像文件为 over-written.

    时自动刷新