Аргумент размера geom_sf не работает, если размер ‹ 1

Вопрос: я пытаюсь создать карту штатов/округов США с помощью пакета 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 ‹ 1, как показано в коде для карт Боба Рудиса здесь и Мэтт Стримас-Макки здесь. Похоже, моя проблема может быть той же самой, на которую ссылается здесь на странице Github ggplot2 под названием "geom_sf округляет небольшие размеры до 1", но проблема была закрыта, и я не уверен, смогу ли/как реализовать исправление на своей машине. Есть еще одна похожая проблема, зарегистрированная здесьздесь), но Хэдли предположил, что проблема в данном случае может заключаться в графическом устройстве/программе просмотра. Я воспроизвел свою проблему (и две проблемы Github, указанные выше) в RStudio и RGUI, но я не уверен, как еще проверить/изменить свое графическое устройство/программу просмотра.

Информация о версии: я использую ggplot2_3.0.0, sf_0.6.3, R версии 3.5.1, RStudio версии 1.1.456 и Windows 10 версии 1803; проблема также была воспроизведена с помощью RGUI.

Код: Ниже приведен репрекс с использованием карты Северной Каролины из geom_sf() документов< /а>. Любая помощь будет оценена по достоинству. Спасибо!

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

ОБНОВЛЕНИЕ: как указали Крис и Ибусетт, линии границ имеют ожидаемую ширину после использования ggsave. Спасибо!

введите описание изображения здесь


person sdevine188    schedule 16.08.2018    source источник
comment
Вы выводили с помощью ggsave? Я не могу воспроизвести ошибку на своей машине.   -  person Chris    schedule 16.08.2018
comment
Я вижу такое же поведение, но я думаю, что это действительно зависит от графического устройства. Например, если вы попытаетесь сохранить в pdf с помощью ggsave, вы получите другие результаты. Кроме того, учтите, что существует ограничение на то, насколько тонкая линия может быть отображена на вашем мониторе, и что ширина линии на мониторе неизбежно квантуется (т. е. она может быть 1 пиксель или 2 пикселя, но не 1,5 пикселя). ), так что я думаю, что всегда будут какие-то точки отсечки, где вы увидите внезапные изменения.   -  person lbusett    schedule 16.08.2018
comment
Я голосую за то, чтобы закрыть этот вопрос, потому что это проблема графических устройств, а не проблема кодирования, и комментарии предоставили решение в соответствии с обновлением OP.   -  person tjebo    schedule 06.02.2020