Аргумент размера 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, Спасибо!

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

1 ответ

Этот ответ предназначен только для тех, кто не любит ggsaveвсе их сюжеты, чтобы обеспечить некоторые трюки.

Да, это зависит от графического устройства. Некоторые графические устройства довольно плохи, когда дело доходит до таких вещей (если смотреть на вас, устройство Windows по умолчанию). Следующий репрекс был выполнен с параметрами чанка, установленными для рендеринга графика с пакетом '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

Создано 14 января 2022 г. пакетом reprex (v2.0.1)

В файлах уценки вы можете установить графическое устройство по умолчанию аналогичным образом. Для настройки устройства глобально для всего документа:

      ```{r, include = FALSE}
knitr::opts_chunk$set(
  dev = "ragg_png"
)
```

Для тех, кто работает с RStudio, вы можете изменить графическое устройство по умолчанию, перейдя в «Инструменты> Глобальные параметры> Общие> Графика (вкладка)».

Другие вопросы по тегам