将频率添加到ggplot映射(使用rgdal)

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

我最近开始使用地图,现在我觉得“我几乎在那里”。当我们遇到与R相关的问题时,互联网是一个了不起的工具,但是2014/2015年的脚本似乎已经过时了,无法满足我的需求。我一直在关注这个link,这个link没有成功。

假设有一个我可以轻松绘制的“地图”文件

library(tidyverse)
library(rgdal)
map <- readOGR("mapa", "UFEBRASIL", encoding = "utf-8")

ideal_map <- fortify(map)

ggplot() + 
  geom_path(data = ideal_map, 
            aes(x = long, y = lat, group = group),
            colour = "black") )

[以防万一你想下载这个readOGR文件,https://www.dropbox.com/s/vnpwwxh471ttaop/map.zip?dl=0] Brazil -- Map

我现在想在这个地图中插入一些额外的信息,例如每个州的名称(NM_ESTADO)和州中间的特定值(Valor)。此信息收集在具有相同列名的另一个数据集中:

> dados %>% names
[1] "NR_REGIAO" "Sigla"     **"NM_ESTADO"** "Valor"    
> head(map@data,1)
  ID CD_GEOCODU **NM_ESTADO** NM_REGIAO
0  1         11  RONDÔNIA     NORTE

现在主要问题是:

当我合并两个数据集然后继续使用fortify函数时,似乎添加的新信息就会消失:

#merge
ideal_map2 <- merge(map, dados,by.x = "NM_ESTADO", by.y = "NM_ESTADO")
ideal_map2@data
ideal_map <- fortify(ideal_map2)
head(ideal_map)

       long       lat order  hole piece id group
1 -63.32721 -7.976720     1 FALSE     1  0   0.1
2 -63.11838 -7.977107     2 FALSE     1  0   0.1

那么,我该怎么办?

谢谢!如果您需要我的数据集文件来运行代码,请参阅以下内容:

dados <- structure(list(NR_REGIAO = c("NORTE", "NORTE", "NORTE", "NORTE", 
"NORTE", "NORTE", "NORTE", "NORDESTE", "NORDESTE", "NORDESTE", 
"NORDESTE", "NORDESTE", "NORDESTE", "NORDESTE", "NORDESTE", "NORDESTE", 
"CENTRO-OESTE", "CENTRO-OESTE", "CENTRO-OESTE", "CENTRO-OESTE", 
"SUDESTE", "SUDESTE", "SUDESTE", "SUDESTE", "SUL", "SUL", "SUL"
), Sigla = c("AC", "AP", "AM", "PA", "RO", "RR", "TO", "AL", 
"BA", "CE", "MA", "PB", "PE", "PI", "RN", "SE", "DF", "GO", "MT", 
"MS", "ES", "MG", "RJ", "SP", "PR", "SC", "RS"), NM_ESTADO = c("ACRE", 
"AMAPÁ", "AMAZONAS", "PARÁ", "RONDÔNIA", "RORAIMA", "TOCANTINS", 
"ALAGOAS", "BAHIA", "CEARÁ", "MARANHÃO", "PARAÍBA", "PERNAMBUCO", 
"PIAUÍ", "RIO GRANDE DO NORTE", "SERGIPE", "DISTRITO FEDERAL", 
"GOIÁS", "MATO GROSSO", "MATO GROSSO DO SUL", "ESPIRITO SANTO", 
"MINAS GERAIS", "RIO DE JANEIRO", "SÃO PAULO", "PARANÁ", "SANTA CATARINA", 
"RIO GRANDE DO SUL"), Valor = c("16", "13", "5", "40", "60", 
"10", "20", "19", "89", "62", "27", "20", "84", "26", "17", "107", 
"143", "86", "78", "79", "70", "285", "109", "169", "181", "159", 
"322")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-27L))
r ggplot2 maps data-visualization
1个回答
1
投票

你最好投资sf包用于空间数据。 ggplot2知道如何处理这些数据,你可以像data.frame一样操纵它们。只要我无法获取您的数据,以下代码就可以工作,但它在我的计算机上处​​理类似的数据。希望这可以帮助

library(sf)
library(ggplot2)

map <- read_sf("mapa/UFEBRASIL.shp")
ideal_map <- merge(map, dados,by.x = "NM_ESTADO", by.y = "NM_ESTADO")

ggplot(ideal_map) +
  geom_sf() +
  geom_sf_label(aes(label=paste(NM_ESTADO,Valor,sep="\n"))

# with self avoiding labels using ggrepel package
library(ggrepel)

ggplot(ideal_map) +
  geom_sf() +
  geom_label_repel(
    aes(label = label=paste(NM_ESTADO,Valor,sep="\n"), geometry=geometry),
    stat = "sf_coordinates"
  )
© www.soinside.com 2019 - 2024. All rights reserved.