Pertanyaan Peta kartogram + choropleth di R


Saya telah menggunakan ggplot2 belakangan ini untuk membuat sekelompok choropleth. Saya bertanya-tanya apakah mungkin untuk menggunakan ggplot2 untuk membuat peta yang mirip dengan ini (dari WorldMapper):

enter image description here

Ini adalah choropleth di mana poligon shapefile terdistorsi untuk mewakili jumlah populasi relatif. Saya yakin ini disebut kartogram. Mereka melakukan ini dengan banyak variabel lain. Dalam semangat Tantangan R Choropleth, adakah yang tahu cara melakukan ini menggunakan R?


32
2018-02-16 21:48


asal


Jawaban:


Itu cartogram  paket, tersedia di CRAN, memiliki karet sheet gaya distorsi-style yang Anda inginkan.


5
2017-09-20 17:48



Ini mungkin berhasil:

Anda perlu menginstal FFTW terlebih dahulu. Rcartogram dan getcartr Anda akan perlu devtools.

Tidak yakin bagaimana cara melakukannya ggplot2, tapi di sini ada pilihan lain.

Di sini saya menggunakan shapefile dari Peta Dunia Tematik, setelah Anda mengunduh dan membuka zip, Anda akan mendapatkan folder bernama TM_WORLD_BORDERS-0.3.

Untuk choropleth / cartogram, Anda akan membentuk ulang pertama dengan ukuran, dan bayangan dengan fitur:

library(rgdal)#needed for readOGR
library(sp) #needed for spplot
library(Rcartogram)
library(getcartr)
setwd("<your_directory_with_shapefile>") #to the file that has your shapefile and your information file (in this case, a csv named datR)
#read shapefile
#here i have a folder with a shapefile and a csv with columns as ISO (IS02 for convenience) country and value
worldR <- readOGR(dsn = getwd(), layer= "TM_WORLD_BORDERS-0.3") # If reading a shapefile, the data source name (dsn= argument) is the folder (directory) where the shapefile is, and the layer is the name of the shapefile (without the .shp extension)
#names(worldR) #note how here there are columns for ISO2 (which matches a column named 'iso' in datR and LAT\LON
#[1] "FIPS"      "ISO2"      "ISO3"      "UN"        "NAME"      "AREA"      "POP2005"   "REGION"    "SUBREGION" "LON"       "LAT"
proj4string(worldR)
datR <- read.csv("datR.csv") #this is a file that has one column called 'score' and one column called size':

   head(datR)
  #  iso size     score
  #1  AE  323 0.9819077
  #2  AR  262 0.9591067
  #3  AT 7481 0.9987313
  #4  AU 5425 0.9837414
  #5  BA   31 0.9871938
  #6  BB   99 0.9715991

  ##Merge SpatialPolygonsDataFrame with other info
  map_dat <- merge(worldR, datR, by.x="ISO2",by.y="iso")
  #remove coordinate reference system arguments
  proj4string(map_dat) <- CRS(as.character(NA)) # from here https://github.com/chrisbrunsdon/getcartr/issues/1
  world.carto <- quick.carto(map_dat, map_dat$size, blur = 0)
  #plot(world.carto) #cartogram without anything
  #spplot size, color
  my.palette = c("#ff0000", "#ff8000", "#ffff00", "#bfff00","#00ff00") #red, orange, yellow, light green, dark green
  spplot(world.carto, 'score', col.regions = my.palette, cuts = length(my.palette)-1,main="Choropleth of score and cartogram of size")

Ini seharusnya memberi Anda plot yang mirip dengan ini:

enter image description here

Saya melakukan ini dengan tergesa-gesa, beri tahu saya jika berhasil


1
2017-12-09 17:14