首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于shapefile的ggplot自定义类别图例

用于shapefile的ggplot自定义类别图例
EN

Stack Overflow用户
提问于 2020-04-24 19:00:43
回答 1查看 334关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
复制
  library(raster)
  library(ggplot2)
  library(sf)

  fr.shp.admin <- getData('GADM', country='FRA', level=0)
  fr.shp <- getData('GADM', country='FRA', level=1)
  fr.shp.df <- data.frame(fr.shp)

  set.seed(123)

  dat <- data.frame(
      NAME_1 = rep(fr.shp.df$NAME_1, 2), 
      season = rep(c('a','b'), each = 13),
      value = c(sample(0:6, size = 8, replace = T), 0.1, 0.6, 100, 500,1250,
                sample(0:6, size = 8, replace = T), 0.3, 0.7,50, 400,1700))

  fr.shp.sf <- st_as_sf(fr.shp)
  fr.shp.admin.sf <- st_as_sf(fr.shp.admin)

  temp.shp <- merge(fr.shp.sf, dat, by = 'NAME_1')

  ggplot() +
  geom_sf(data = temp.shp, aes(fill = value), colour = NA) +
  geom_sf(data = fr.shp.admin.sf, fill = NA, col = 'black') +
  facet_wrap(~season) 

我想绘制这张地图,这样我就可以为这些类别定义颜色,而不是连续的图例。例如:

代码语言:javascript
代码运行次数:0
运行
复制
  (0-1] # => 0 & < 1
  (1-2] # >= 1 & < 2
  (2-3] # >= 2 & < 3
  (3-4] # >= 3 & < 4
  (4-5] # >= 4 & < 5
  > 5   # >= 5

我想这样做,这样我就可以把每一个类别的颜色区分开来。我怎样才能在ggplot中做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-25 20:35:08

我建议将base::cut()ggplot2::scale_fill_manual()组合起来,将连续变量转化为因子,并将其命名为颜色。

考虑一下您的代码中的这个细微的变化:

代码语言:javascript
代码运行次数:0
运行
复制
library(raster)
library(ggplot2)
library(sf)

fr.shp.admin <- getData('GADM', country='FRA', level=0)
fr.shp <- getData('GADM', country='FRA', level=1)
fr.shp.df <- data.frame(fr.shp)

set.seed(123)

dat <- data.frame(
  NAME_1 = rep(fr.shp.df$NAME_1, 2), 
  season = rep(c('a','b'), each = 13),
  value = c(sample(0:6, size = 8, replace = T), 0.1, 0.6, 100, 500, 1250,
            sample(0:6, size = 8, replace = T), 0.3, 0.7,50, 400, 1700))

fr.shp.sf <- st_as_sf(fr.shp)
fr.shp.admin.sf <- st_as_sf(fr.shp.admin)

temp.shp <- merge(fr.shp.sf, dat, by = 'NAME_1')

temp.shp$value2 = cut(temp.shp$value,
                      breaks = c(-Inf, 0, 1000, +Inf),
                      labels = c("low", "medium", "high"))

ggplot() +
  geom_sf(data = temp.shp, aes(fill = value2), colour = NA) +
  geom_sf(data = fr.shp.admin.sf, fill = NA, col = 'black') +
  scale_fill_manual(values = c("low" = "cornflowerblue",
                               "medium" = "goldenrod2",
                               "high" = "red")) + 
  facet_wrap(~season) 

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61415597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档