Как объединить шейп-файл с CSV и создать график

Эта проблема открыта в Batarang Github здесь: https://github.com/angular/angularjs-batarang/issues/156

Вы можете загрузить предыдущую версию Batarang из этого zip-файла: https://github.com/angular/angularjs-batarang/archive/v0.4.3.zip

  1. Открыть дополнительные инструменты-> Расширения в Chrome
  2. Найдите AngularJS Batarang и нажмите на мусорную корзину, чтобы удалить расширение
  3. Загрузите .zip
  4. Извлеките file
  5. Открыть дополнительные инструменты-> Расширения в Chrome
  6. Проверить режим разработчика вверху
  7. Нажмите «Загрузите распакованное расширение»
  8. Выберите каталог, в котором вы извлекли zip
  9. . Если вы получили сообщение об ошибке в файле манифеста, то, вероятно, вы выбрали слишком высокий уровень каталога. Убедитесь, что вы выбрали каталог нижнего уровня angularjs-batarang-0.4.3
  10. Загрузите страницу AngularJS и снова используйте Batarang с инспектором, как и до

. Это будет восстановить предыдущую версию, которая, имея проблемы, имеет некоторые в основном рабочие функции, такие как профилирование производительности, инспектор областей, параметры и вкладку справки, которые удалены из последней версии. Версия 0.7.1 исправляет основной поломки приложений, но она предоставляет только дерево области (без инспекторов) и новые функции угловой подсказки.

1
задан zx8754 16 January 2019 в 12:48
поделиться

2 ответа

Сначала несколько примеров данных. Это должно быть похоже на то, что вы получаете, когда читаете в своем шейп-файле. Пространственный объект R называется a SpatialPolygonsDataFrame. Он содержит data.frame с ковариатной информацией о ваших полигонах.

library(sp)
Sr1  <-  Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2  <-  Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3  <-  Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4  <-  Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
Srs1  <-  Polygons(list(Sr1), "s1")
Srs2  <-  Polygons(list(Sr2), "s2")
Srs3  <-  Polygons(list(Sr3, Sr4), "s3/4")
SpP  <-  SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)
Spdf <- SpatialPolygonsDataFrame(SpP, data.frame(name = c("a", "b", "c"), row.names = c("s1", "s2", "s3/4")))

Теперь у вас есть пространственный объект, который вы можете нарисовать:

plot(Spdf)

и взгляните на прикрепленный data.frame вашего пространственного объекта. Здесь вам нужно иметь некоторый идентификатор, который будет соответствовать вашим результатам выборов:

Spdf@data

У вас также есть другой фрейм данных с вашими «результатами выборов» (также с этим идентификатором)

election <- data.frame(name = c("a", "c", "b"), voted = c(0.1, 0.2, 0.3))
[1116 ] Теперь сопоставьте в результатах выборов с вашим пространственным объектом, чтобы вы могли построить его:

Spdf@data$voted <- election$voted[match(Spdf$name, election$name)]

Чтобы нарисовать полигоны с результатом голосования как цвет многоугольника, вам нужна палитра:

[115 ]

Затем просто начертите:

plot(Spdf, col = Spdf@data$colour)

enter image description here

Вы можете представить, что у вас будет более 3 перерывов масштаб, и у вас будет больше полигонов, но это только пример. Удачи!

0
ответ дан trosendal 16 January 2019 в 12:48
поделиться

Вы можете выбрать одну партию (и затем иметь одно значение для административного региона) или фасет стороной (и иметь столько же кратных, сколько есть партий).

Это действительно зависит от вашей цели с визуализацией. Принимая во внимание, что в вашем файле 48 результатов, «маленькие» множители будут довольно большими, и фильтрация имеет больше смысла.

Для соединения шейп-файла и фрейма данных с результатами выборов я предлагаю использовать одну из функций *_join из пакета tidyverse.

Рассмотрим этот подход, основанный на предположении о фильтрации:

library(tidyverse)
library(sf)

tf_elec <- tempfile(fileext = ".csv") # create a temporary csv file
download.file("https://catalogo.datos.gba.gob.ar/dataset/1ae289f8-532c-4f69-a3c8-0268fe0ee390/resource/f8168491-4c38-4b03-82f1-b05fe43f8349/download/generales-2017.csv", tf_elec, quiet = T) 
elec <- read_csv2(tf_elec) # read the data

tf_zip <- tempfile(fileext = ".zip") # a temoprary zip file
download.file("https://catalogo.datos.gba.gob.ar/dataset/627f65de-2510-4bf4-976b-16035828b5ae/resource/de607a34-b782-420f-93ed-35073a016e01/download/limite_partidos.zip", tf_zip, quiet = T)
unzip(tf_zip, files = 'Limite_partidos/GeoJSON/Partidos.geojson', exdir = tempdir(), junkpaths = T)
municipios <- st_read(paste0(tempdir(), '/Partidos.geojson'), quiet = T) # read the metro stations

src <- municipios %>%
  left_join(elec, by = c('nam' = 'distrito')) %>%
  filter(partido == 'VOTOS NULOS') #or what not... :)

ggplot() +
  geom_sf(data = src, aes(fill = votos)) 

Самая сложная часть - загрузка данных. left_join() находится во втором последнем фрагменте, и самым последним является визуализация - ради простоты я выбрал легкий маршрут ggplot2, но также рассмотрим отличный пакет tmap, если вы хотите, чтобы ваши карты действительно сиять.

enter image description here

0
ответ дан Jindra Lacko 16 January 2019 в 12:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: