使用 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中的复杂轴标签

伊朗电影《天堂的颜色》,迅雷下载

将希腊字符添加到轴标题

将标签栏项目添加到 UITabBar 时出现问题

R语言使用Hmisc包的label函数为dataframe中的特定变量(数据列)添加变量标签(variable labels)

Mailchimp 使用 php 和 drupal 8 将标签添加到列表中的现有成员