【发布时间】:2018-08-16 03:48:50
【问题描述】:
问题:我正在尝试使用 sf 包和来自 ggplot2 的 geom_sf() 创建美国州/县的地图,但我无法获得多边形边界的 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 here 和 Matt Strimas-Mackey here 的地图代码所示.看来我的问题可能与 ggplot2 的 Github 页面上引用的 here 相同,标题为“geom_sf 将小尺寸舍入到 1”,但问题已解决,我不确定是否/如何在我的机器。还有另一个类似的问题提交了here(和here),但哈德利建议这种情况下的问题可能是图形设备/查看器。我在 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()docs 的北卡罗来纳州地图的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)
nc %>% ggplot() + geom_sf(size = 0.702)
nc %>% ggplot() + geom_sf(size = 0.703)
# 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
更新:正如 Chris 和 Ibusett 所指出的,在使用 ggsave 后,边框线具有预期的宽度。谢谢!
【问题讨论】:
-
您是否使用
ggsave输出?我无法在我的机器上重现该错误。 -
我看到了同样的行为,但我想这真的取决于图形设备。例如,如果您尝试使用
ggsave保存为 pdf,您将得到不同的结果。另外,请考虑在监视器上可以渲染多少“细”线,并且监视器上的线的宽度不可避免地被“量化”(即,它可以是 1 像素或 2 像素,但不是 1.5 像素),所以我认为总会有一些“截止点”,你会看到突然的变化。 -
我投票结束这个问题,因为这是图形设备的问题,而不是编码问题,并且 cmets 已根据 OP 的更新提供了解决方案
标签: r dictionary ggplot2 sf