我正在尝试根据每个管理区域的天气风险级别为国家地图着色。我相信这最好在 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.
我如何定义这一点,以便我可以将莱索托作为一个地区?或者是否有其他方法可以实现这一目标。
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