Аргумент размера 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, вы можете изменить графическое устройство по умолчанию, перейдя в «Инструменты> Глобальные параметры> Общие> Графика (вкладка)».