Карта Индии в R с различными значениями пяти показателей для каждого штата Индии
Я хочу создать карту Индии в R. У меня есть пять показателей с разными значениями каждого штата. Я хочу построить пузыри с пятью разными цветами, и их размер должен отражать их интенсивность в каждом штате. Например:
State A B C D E
Kerala - 39, 5, 34, 29, 11
Bihar - 6, 54, 13, 63, 81
Assam - 55, 498, 89, 15, 48,
Chandigarh - 66, 11, 44, 33, 71
Я просмотрел несколько ссылок, связанных с моей проблемой:
[1] http://www.r-bloggers.com/nrega-and-indian-maps-in-r/
Но эти ссылки не могли служить моей цели. Любая помощь в этом направлении будет принята с благодарностью.
Я также пытался
library(mapproj)
map(database= "world", regions = "India", exact=T, col="grey80", fill=TRUE, projection="gilbert", orientation= c(90,0,90))
lat <- c(23.30, 28.38)
lon <- c(80, 77.12) # Lon and Lat for two cities Bhopal and Delhi
coord <- mapproject(lon, lat, proj="gilbert", orientation=c(90, 0, 90))
points(coord, pch=20, cex=1.2, col="red")
У ореховой скорлупы есть следующие проблемы:
(1) Это не дает мне сюжет на районном уровне. Даже не границы штатов.
(2) Как создать пузырьки или точки моих данных на этом графике, если у меня есть только названия мест и соответствующее значение для графика?
(3) это можно легко сделать в library(RgoogleMaps)
или же library(ggplot2)
? (Просто предположение, я не знаю много об этих пакетах)
2 ответа
Как утверждает @lawyeR, картограмма (или тематическая) чаще используется для представления переменных на карте. Это потребует от вас создания одной карты для каждой переменной. Позвольте мне привести вам пример:
require("rgdal") # needed to load shapefiles
# obtain India administrative shapefiles and unzip
download.file("http://biogeo.ucdavis.edu/data/diva/adm/IND_adm.zip",
destfile = "IND_adm.zip")
unzip("IND_adm.zip", overwrite = TRUE)
# load shapefiles
india <- readOGR(dsn = "shapes/", "IND_adm1")
# check they've loaded correctly with a plot
plot(india)
# all fine. Let's plot an example variable using ggplot2
require("ggplot2")
require("rgeos") # for fortify() with SpatialPolygonsDataFrame types
india@data$test <- sample(65000:200000000, size = nrow(india@data),
replace = TRUE)
# breaks the shapefile down to points for compatibility with ggplot2
indiaF <- fortify(india, region = "ID_1")
indiaF <- merge(indiaF, india, by.x = "id", by.y = "ID_1")
# plots the polygon and fills them with the value of 'test'
ggplot() +
geom_polygon(data = indiaF, aes(x = long, y = lat, group = group,
fill = test)) +
coord_equal()
Наконец, я заметил, что вы задали тот же вопрос в GIS SE. Это считается плохой практикой и, как правило, осуждается, поэтому я пометил этот вопрос как дубликат этого. Как правило, старайтесь не создавать дубликаты.
Удачи!
Как только у вас есть шейп-файл для Индии, вам нужно создать хороплет. Это возьмет карту шейпфул и раскрасит каждый штат Индии в градиент, отражающий ваши данные. Возможно, вы захотите создать панель из пяти графиков, каждый из которых показывает Индию и ее штаты, окрашенные в соответствии с одной из ваших пяти переменных.
Для тех, кто может толкнуть этот ответ, вот dput
фрейма данных, после небольшой очистки.
dput(df)
structure(list(State = c("Kerala", "Bihar", "Assam", "Chandigarh"
), A = c("39", "6", "55", "66"), B = c("5", "54", "498", "11"
), C = c("34", "13", "89", "44"), D = c("29", "63", "15", "33"
), E = c("11", "81", "48", "71")), .Names = c("State", "A", "B",
"C", "D", "E"), row.names = c("Kerala", "Bihar", "Assam", "Chandigarh"
), class = "data.frame")