Неправильные цветные легенды с наложением двух сюжетов в ggplot2 - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь дать комбинированную цветовую схему на пространственном графике, используя ggplot2, следующим образом:

  • Переменная Фактор (2 уровня) используется для выбора оттенка (в моем случае, оранжевого или синего)
  • Непрерывная переменная используется для выбора насыщенности

Я не нашел более простого способа сделать это, чем сложить два графика, верхний - серый градиент для имитации насыщенности:

    ggplot(data = italian.regions) +
  geom_sf(fill = c("#BFD6FF", "#FFEBBF")[as.numeric(as.factor(regions.lookup$`engine.top`))], lwd = .2) +
  geom_sf(aes(fill = regions.lookup$`engine.diff`), lwd = .2, alpha = .3) +
  scale_fill_gradient(high = "#666666", low = "#EFEFEF")

Я использую эстетику, чтобы заполнить градиент, и это работает. Это пример сюжета:

example plot

Но (конечно) цветовая легенда относится к эстетике, но было бы гораздо более значимо иметь одну, описывающую дискретные значения в 'engine.top'.

Возможно ли это сделать? Есть ли более простой способ получить двухтональную градиентную цветовую схему без объединения двух графиков?

1 Ответ

3 голосов
/ 30 мая 2019

Мой предпочтительный метод - использовать scale_fill_identity() и hcl().Посмотрите, работает ли это для вас

library(sf)
library(tidyverse)

# this file is already on your computer 
nc <- st_read(system.file("shape/nc.shp", package="sf"))


nc_colors <-
  nc %>% 
  mutate(
    # 220 = blue and # 40 = orange
    hue = ifelse(str_detect(CNTY_ID, "^18"), 220, 40),
    light = AREA/max(AREA)*100,
    # the hcl function returns a hex code
    hex = hcl(h = hue, l = light)
  )


ggplot() +
  geom_sf(data = nc_colors, aes(fill = hex)) +
  scale_fill_identity()

enter image description here

Другое решение, которое вы можете использовать, это сделать что-то вроде aes(...fill = hue, alpha = AREA), затем использовать scale_fill_manual()

...