使用 R 中的 plot_geo 将标签添加到伊朗地图的省份
Posted
技术标签:
【中文标题】使用 R 中的 plot_geo 将标签添加到伊朗地图的省份【英文标题】:Add label to provinces to Iran map using plot_geo in R 【发布时间】:2021-12-27 08:51:59 【问题描述】:我正在尝试绘制地图,每个省份都有特定的颜色。我去了this site 并下载了名为“irn_adm_unhcr_20190514_SHP.zip”的文件。在我将其保存并解压缩到计算机上的某个位置后,然后运行以下代码以生成以下地图:
iran <- st_read("D:\\rm\\SMI\\www\\gis\\irn_admbnda_adm1_unhcr_20190514.shp")
dat <-data.frame(
id = 1:31,
state = iran$ADM1_EN ,
pr = c(530,-42,1673,75,206,544,1490,118,75,
40,105,191,111,810, 609,425,418,550, 40, 425, -54,-50,
16, 18, 133,425, -30, 241,63, 191,100))
dat<-dat %>% mutate(color_province = case_when(pr <= 50 ~ 'green',
pr > 150 ~ 'red',
TRUE ~ 'yellow'))
iran %>% plot_geo(color = ~ADM1_EN,colors=dat$color_province)
如何在地图上添加省份名称?
【问题讨论】:
【参考方案1】:您可以提取各省的中心,然后将它们添加为文本。我没有使用过plotly
,也不知道如何添加或格式化文本,所以我使用了ggplot
来显示结果。
library(tidyverse)
iran <- [point to your shapefile]
labels <- iran %>%
filter(ADM1_EN %in% dat$state) %>%
st_centroid() %>%
st_coordinates() %>%
as_tibble()
dat <- data.frame(
id = 1:31,
state = iran$ADM1_EN ,
pr = c(530,-42,1673,75,206,544,1490,118,75,
40,105,191,111,810, 609,425,418,550, 40, 425, -54,-50,
16, 18, 133,425, -30, 241,63, 191,100),
x = labels$X,
y = labels$Y)
dat <- dat %>% mutate(color_province = case_when(pr <= 50 ~ 'green',
pr > 150 ~ 'red',
TRUE ~ 'yellow'))
ggplot(iran) +
geom_sf(aes(fill = dat$color_province)) +
geom_text(data = dat, aes(x = x, y = y, label = state)) +
theme_void()
【讨论】:
谢谢,但出于某种原因,我必须使用 plotly(plot_geo) 代替 ggplot! 我需要ggplot()
来显示提取数据的结果。您现在可以根据需要使用plotly()
。也许,add_text()
函数。以上是关于使用 R 中的 plot_geo 将标签添加到伊朗地图的省份的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用Hmisc包的label函数为dataframe中的特定变量(数据列)添加变量标签(variable labels)