ggplot2中重叠了两个图的错误颜色图例

时间:2019-05-29 15:47:06

标签: r ggplot2 geospatial sf

我正在尝试通过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

但是(ofc)颜色图例指的是美学,但在'engine.top'中描述离散值应该更有意义

有可能这样做吗?有没有一种更简单的方法来实现两色调的渐变配色方案而无需叠加两个图?

提前分配tnx

1 个答案:

答案 0 :(得分:2)

我首选的方法是使用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()