首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >裁剪国家边界形状的地图

裁剪国家边界形状的地图
EN

Stack Overflow用户
提问于 2021-02-07 18:41:56
回答 1查看 194关注 0票数 0

我正在尝试下载温度数据,并使用R将其可视化。我使用raster包下载温度,并使用ggplot2将其可视化。

代码语言:javascript
复制
library(raster)
library(ggplot2)
library(magrittr)

tmax_data <- getData(name = "worldclim", var = "tmax", res = 10)
gain(tmax_data)=0.1
tmax_mean <- mean(tmax_data)
tmax_mean_df <- as.data.frame(tmax_mean, xy = TRUE, na.rm = TRUE)

tmax_mean_df %>%
  ggplot(aes(x=x,y=y)) +
  geom_raster(aes(fill = layer)) +
  labs(title = "Mean monthly maximum temperatures",
       subtitle = "For the years 1970-2000") +
  xlab("Longitude") +
  ylab("Latitude") +
  scale_fill_continuous(name = "Temperature (°C)")

但是,数据集包含整个世界的温度值。但我想把具体的国家形象化。我可以通过定义一个边界框来裁剪地图,但我希望将地图裁剪成国家的形状(而不是正方形)。有没有允许这种功能的包?也许可以通过传递一个国家的shapefile并将地图裁剪成该形状?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-09 00:22:15

您可以将sf包与raster::cropraster::mask结合使用。以下是法国的演示:

代码语言:javascript
复制
library(raster)
library(ggplot2)
library(magrittr)
library(sf)

tmax_data <- getData(name = "worldclim", var = "tmax", res = 10)
gain(tmax_data)=0.1
tmax_mean <- mean(tmax_data)

france_sf <- st_as_sf(maps::map(database = "france", plot = FALSE, fill = TRUE))

tmax_mean_france <- raster::crop(
  raster::mask(tmax_mean, as_Spatial(france_sf)),
  as_Spatial(france_sf)
)

tmax_mean_france_df <- as.data.frame(tmax_mean_france, xy = TRUE, na.rm = TRUE)

tmax_mean_france_df %>%
  ggplot(aes(x=x,y=y)) +
  geom_raster(aes(fill = layer)) +
  labs(title = "Mean monthly maximum temperatures **in France**",
       subtitle = "For the years 1970-2000") +
  xlab("Longitude") +
  ylab("Latitude") +
  scale_fill_continuous(name = "Temperature (°C)")

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

https://stackoverflow.com/questions/66086949

复制
相关文章

相似问题

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