Эта проблема открыта в Batarang Github здесь: https://github.com/angular/angularjs-batarang/issues/156
Вы можете загрузить предыдущую версию Batarang из этого zip-файла: https://github.com/angular/angularjs-batarang/archive/v0.4.3.zip
. Это будет восстановить предыдущую версию, которая, имея проблемы, имеет некоторые в основном рабочие функции, такие как профилирование производительности, инспектор областей, параметры и вкладку справки, которые удалены из последней версии. Версия 0.7.1 исправляет основной поломки приложений, но она предоставляет только дерево области (без инспекторов) и новые функции угловой подсказки.
Сначала несколько примеров данных. Это должно быть похоже на то, что вы получаете, когда читаете в своем шейп-файле. Пространственный объект 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)
Вы можете представить, что у вас будет более 3 перерывов масштаб, и у вас будет больше полигонов, но это только пример. Удачи!
Вы можете выбрать одну партию (и затем иметь одно значение для административного региона) или фасет стороной (и иметь столько же кратных, сколько есть партий).
Это действительно зависит от вашей цели с визуализацией. Принимая во внимание, что в вашем файле 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
, если вы хотите, чтобы ваши карты действительно сиять.