Вопрос: я пытаюсь создать карту штатов/округов США с помощью пакета 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
. Спасибо!
ggsave
? Я не могу воспроизвести ошибку на своей машине. - person Chris   schedule 16.08.2018ggsave
, вы получите другие результаты. Кроме того, учтите, что существует ограничение на то, насколько тонкая линия может быть отображена на вашем мониторе, и что ширина линии на мониторе неизбежно квантуется (т. е. она может быть 1 пиксель или 2 пикселя, но не 1,5 пикселя). ), так что я думаю, что всегда будут какие-то точки отсечки, где вы увидите внезапные изменения. - person lbusett   schedule 16.08.2018