如何将一个国家作为一个地区?

问题描述 投票:0回答:1

我正在尝试根据每个管理区域的天气风险级别为国家地图着色。我相信这最好在 R 中完成,尽管我对 R 的了解接近于零。

从这篇文章无法使用 ggplot、geom_polygon 和 geom_text 为国家添加标签,我已经能够运行代码并绘制非洲所有国家的风险地图。我尝试根据我的目的调整代码,如下所示:

library(sf)
library(ggplot2)

all_districts <- data.frame(region = c("Maseru",
"Butha-Buthe",
"Leribe",
"Berea",
"Mafeteng", 
"Mohale's Hoek", 
"Quthing",
"Qacha's Nek",
"Mokhotlong",
"Thaba-Tseka"),                          
risk = c(4, 4, 2, 1, 2, 4, 1, 3, 1, 2))

table(all_districts$risk)
mapdata_x <- map_data('world') %>% filter(region %in% all_districts$region)
mapdata_x <- mapdata_x %>% left_join(all_districts, by='region')
label_data <- mapdata_x %>% group_by(region) %>% filter(row_number() == 1)

ggplot(mapdata_x, aes (x = long, y = lat, group = group)) +
geom_polygon(aes(fill = factor(risk)), linewidth = 0.25, color = "black") +
scale_fill_manual(values = c("#a6d96a", "#ffffbf", "#fdae61", "#d7191c"),
name = "Risk Level") +
theme(axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.ticks = element_blank(),
axis.title.y = element_blank(),
axis.title.x = element_blank(),
rect = element_blank())+
labs(title = "Weather Risk Levels") +
geom_label_repel(data = label_data,
aes(x = long, y = lat, label = region), size = 3,
max.overlaps = 12)

我的代码上线失败

mapdata_x <- map_data('world') %>% filter(region %in% all_districts$region)

给出错误:

Error in h(simpleError(msg, call)) : 
  error in evaluating the argument 'x' in selecting a method for function '%in%': object 'region' not found.

我如何定义这一点,以便我可以将莱索托作为一个地区?或者是否有其他方法可以实现这一目标。

r ggplot2 r-sf
1个回答
0
投票
library(sf)
library(sp)
library(dplyr)
library(ggplot2)
library(ggrepel)

download.file("https://biogeo.ucdavis.edu/data/diva/adm/LSO_adm.zip", "LSO_adm.zip")
unzip("LSO_adm.zip", exdir= "LSO_adm")

mapdata_x <- st_read(dsn="LSO_adm\\LSO_adm1.shp", quiet = TRUE)

all_districts <- data.frame(region = c("Maseru", "Butha-Buthe", "Leribe", "Berea", 
                                       "Mafeteng", "Mohale's Hoek", "Quthing", 
                                       "Qacha's Nek", "Mokhotlong", "Thaba-Tseka"),                          
                            risk = c(4, 4, 2, 1, 2, 4, 1, 3, 1, 2))

mapdata_x <- mapdata_x %>% left_join(all_districts, by=c("NAME_1" = 'region'))
label_data <-  suppressWarnings(st_centroid(mapdata_x)) %>% 
                bind_cols(., st_coordinates(.))

ggplot() +
  geom_sf(data = mapdata_x, aes(fill = factor(risk))) +
  geom_label_repel(data = label_data, aes(x = X, y = Y, label = NAME_1), 
                   size = 3, max.overlaps = 12) +
  labs(title = "Weather Risk Levels") +
  scale_fill_manual(name = "Risk Level", 
                    values = c("#a6d96a", "#ffffbf", "#fdae61", "#d7191c")) +
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        axis.title = element_blank(),
        rect = element_blank())

创建于 2024-03-29,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.