Добавить частоты на карту ggplot (используя rgdal) - PullRequest
0 голосов
/ 10 апреля 2019

Я недавно начал работать с картами, и теперь я чувствую, что "я почти там" Интернет - удивительный инструмент, когда у нас есть вопросы, связанные с R, но кажется, что сценарии 2014/2015 годов устарели, чтобы делать то, что я хочу. Я перешел по этой ссылке и по этой ссылке безуспешно.

Допустим, у нас есть файл "карты", который я могу легко построить

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 ) и конкретное значение ( Доблесть ) в середине поля. государство. Эта информация собрана в другом наборе данных с такими же именами столбцов:

> 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

Теперь приходит главный вопрос:

Когда я объединяю оба набора данных, а затем продолжаю использовать функцию укрепления, кажется, что добавленная новая информация просто исчезает:

#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))

1 Ответ

1 голос
/ 10 апреля 2019

Вам лучше инвестировать в пакет 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"
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...