问题:我正在尝试使用sf包和ggplot2中的geom_sf()
创建美国州/县地图,但是当size < 1
(例如ggplot(sf_obj)%>% geom_sf(size = 0.5)
)时,我无法使geom_sf()
的多边形边界线宽度的size
参数正确创建细线。
具体来说,一个州/县的边界线似乎从任意小的值(例如size = 0.05
)到size = 0.702
都有相同的宽度。然后,在size = 0.702
处出现奇怪的截止点,超过此值时,边界线突然变粗。然后从size = 0.703
到size = 1
,边界线似乎有相同的宽度。对于size
> 1,边界线会逐渐变粗,就像预期的那样。
研究:看起来geom_sf()
支持size
<1的渐进变化,如Bob Rudis这里和Matt Strimas-Mackey这里的地图代码所示。似乎我的问题可能与ggplot2的Github页面上标题为“ geom_sf将小尺寸四舍五入到1”的问题相同这里,但该问题已关闭,我不确定如何在我的机器上实现修复。还有另一个类似的问题(以及这里),但是Hadley表示,在这种情况下,问题可能是图形设备/查看器。我在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
输出了吗?在我的电脑上无法复现这个错误。 - Chrisggsave
保存为pdf,您将会得到不同的结果。此外,请注意,在您的显示器上可以呈现出多么“细”的线条有一个限制,并且线条在显示器上的宽度无法避免地“量子化”(即它可以是1个像素或2个像素,但不能是1.5个像素),因此我认为一定会存在一些“截止点”,您会看到突然的变化。 - lbusett