Установка толщины края/границы с помощью geom_sf в ggplot

Я пытаюсь изменить цвет границы областей и объекта sf, когда рисую его. Изменение цвета границы — это нормально, однако линии немного тонкие, поэтому я хочу сделать толще только цветные линии, чтобы они были более заметными.

Чтение этого вопроса предполагает, что использование "lwd " позволит изменять толщину. Однако, когда я пытаюсь, я либо не получаю никакого эффекта, либо очень толстые линии.

См. пример ниже

library(sf)
library(ggplot)
library(dplyr)

nc <- st_read(system.file("shape/nc.shp", package="sf")) %>%
  mutate(type= case_when(
    BIR74>16000 ~"High",
    TRUE ~"Low"
  ) %>% factor(levels = c("Low", "High"))) #the levels are ordered to avoid the grey lines overwriting the red ones

nc %>%
  ggplot(.) + 
  geom_sf(aes(fill = BIR74, colour = type)) + #does the job but the coloured borders are quite thing
  scale_color_manual(values = c( "#666666","#F8766D"))


nc %>%
  ggplot(.) + 
  geom_sf(aes(fill = BIR74, colour = type, 
              lwd = ifelse(type =="High", 1, 0.5)) #The values can be anything and it still looks rubbish
          ) + 
  scale_color_manual(values = c( "#666666","#F8766D"))

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

Как я могу получить только ощутимую толщину, например, на x% толще? В идеале будут изменены только целевые края.


person Jonno Bourne    schedule 04.09.2019    source источник
comment
Не уверен, откуда lwd. Для ggplot это будет size, а затем вам может понадобиться установить scale_size_* с помощью ручного или другого типа шкалы. Вы не можете установить нужные значения внутри aes, вы устанавливаете их с помощью шкалы   -  person camille    schedule 04.09.2019
comment
Я использовал lwd, как они использовали это в связанном примере. Я пробовал с размером, но все равно сталкиваюсь с той же проблемой. Можете ли вы привести пример, в котором один набор ребер контролируемо больше другого, я не очень понимаю ваш комментарий.   -  person Jonno Bourne    schedule 05.09.2019
comment
Вы можете поместить size = type == "High" внутрь aes. Тогда будет один размер для истинного и один размер для ложного. Затем добавьте scale_size_manual (или _discrete) и установите там значения. Вы не можете установить точный размер (или любую другую эстетику), которую вы хотите внутри aes.   -  person camille    schedule 05.09.2019


Ответы (1)


Возможно, вы захотите использовать параметр lwd вне aes:

nc %>%
  ggplot(.) + 
  geom_sf(aes(fill = BIR74, colour = type),
          lwd = ifelse(nc$type =="High", 1.5, 0.5)
  ) + 
  scale_color_manual(values = c( "#666666","#F8766D"))

Удачи!

person CRP    schedule 04.09.2019
comment
Это вызывает ошибку. lwd кажется бета-версией эстетики size, но возникает ошибка, потому что вам нужно установить эстетику внутри aes, и вам нужно сделать это без nc$ - person camille; 05.09.2019