当大小 < 1 时,geom_sf 大小参数不起作用

sde*_*188 10 dictionary r ggplot2 r-sf

问题:我正在尝试使用 sf 包和geom_sf()ggplot2创建美国州/县的地图,但我无法获得size多边形边界线宽度的参数geom_sf()以正确创建细线size < 1(例如ggplot(sf_obj) %>% geom_sf(size = 0.5).

具体来说,一个州/县的边界线似乎从任意小的(例如size = 0.05)一直到 具有相同的宽度size = 0.702。然后在 处似乎有一个奇怪的截止点size = 0.702,在该截止点上方边界线突然显得更宽。然后从size = 0.703最多到size = 1边界线似乎具有相同的宽度。对于size> 1,正如预期的那样,边界线会逐渐变宽。

研究:它似乎geom_sf()支持逐渐变化size,如图中的代码对由Bob Rudis地图<1,在这里和马特Strimas-麦基这里。这似乎是我的问题可能是同一个参考这里GGPLOT2的Github的页面上标题为“geom_sf发小尺寸高达1”,但这个问题被关闭,我不知道是否/如何我可以实现我的机器上的修补程序。这里(和这里)还有另一个类似的问题,但哈德利建议在这种情况下问题可能出在图形设备/查看器上。我在 RStudio 和 RGUI 中复制了我的问题(以及上面链接的两个 Github 问题),但我不确定如何测试/更改我的图形设备/查看器。

版本信息:我使用的是 ggplot2_3.0.0、sf_0.6.3、R 版本 3.5.1、RStudio 版本 1.1.456 和 Windows 10 版本 1803;该问题也使用 RGUI 复制。

代码:以下是使用geom_sf() 文档中的北卡罗来纳州地图的 reprex 。任何帮助,将不胜感激。谢谢!

suppressPackageStartupMessages(library(ggplot2))
suppressPackageStartupMessages(library(reprex))
suppressPackageStartupMessages(library(sf))

#################################################

# plot north carolina map
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
ggplot(nc) + geom_sf(size = 0.05)
Run Code Online (Sandbox Code Playgroud)

nc %>% ggplot() + geom_sf(size = 0.702)
Run Code Online (Sandbox Code Playgroud)

nc %>% ggplot() + geom_sf(size = 0.703)
Run Code Online (Sandbox Code Playgroud)

# get version info
packageVersion("ggplot2")
#> [1] '3.0.0'
packageVersion("sf")
#> [1] '0.6.3'
version
#>                _                           
#> platform       x86_64-w64-mingw32          
#> arch           x86_64                      
#> os             mingw32                     
#> system         x86_64, mingw32             
#> status                                     
#> major          3                           
#> minor          5.1                         
#> year           2018                        
#> month          07                          
#> day            02                          
#> svn rev        74947                       
#> language       R                           
#> version.string R version 3.5.1 (2018-07-02)
#> nickname       Feather Spray
Run Code Online (Sandbox Code Playgroud)

更新:正如 Chris 和 Ibusett 指出的,边界线在使用ggsave. 谢谢!

在此处输入图片说明

teu*_*and 3

这个答案只是为了那些不喜欢ggsave他们所有情节的人,提供一些技巧。

是的,它确实取决于图形设备。有些图形设备在处理这类事情时表现非常糟糕(看看你,默认的 Windows 设备)。接下来的 reprex 是使用设置的块选项执行的,以使用“ragg”包渲染绘图。

#+ setup, include=FALSE
knitr::opts_chunk$set(dev = "ragg_png")

#+ main
library(ggplot2)
library(patchwork)

nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
p1 <- ggplot(nc) + geom_sf(size = 0.05) + ggtitle("size = 0.05")
p2 <- ggplot(nc) + geom_sf(size = 0.50) + ggtitle("size = 0.50")
p3 <- ggplot(nc) + geom_sf(size = 1.00) + ggtitle("size = 1.00")
p4 <- ggplot(nc) + geom_sf(size = 2.00) + ggtitle("size = 2.00")

p1 + p2 + p3 + p4
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2022 年 1 月 14 日创建(v2.0.1)

在 Markdown 文件中,您可以以类似的方式设置默认图形设备。要为整个文档全局设置设备:

```{r, include = FALSE}
knitr::opts_chunk$set(
  dev = "ragg_png"
)
```
Run Code Online (Sandbox Code Playgroud)

对于使用 RStudio 的用户,您可以通过转到“工具 > 全局选项 > 常规 > 图形(选项卡)”来更改默认图形设备

在此输入图像描述