33

私は最近、ggplot2 を使用して一連のコロプレスを作成しています。ggplot2 を使用してこれに似たマップを作成できるかどうか疑問に思っていました ( WorldMapperから):

ここに画像の説明を入力

これは、相対的な人口数を表すためにシェープファイルのポリゴンが歪められたコロプレスです。これはカルトグラムと呼ばれるものだと思います。彼らはこれを他の変数の束で行います。Choropleth R Challengeの精神で、 Rを使用してこれを行う方法を知っている人はいますか?

4

2 に答える 2

8

cartogram CRAN で入手できるパッケージには、必要なラバー シートの歪みスタイルのカートグラムがあります。

于 2016-09-20T17:48:17.263 に答える
1

これはうまくいくかもしれません:

FFTWを事前にインストールする必要があります。が必要になりRcartogramますgetcartrdevtools

でそれを行う方法がわかりませんがggplot2、別のオプションがあります。

ここでは、 Thematic World Mapのシェープファイルを使用しています。ダウンロードして解凍すると、 というフォルダーが作成されTM_WORLD_BORDERS-0.3ます。

コロプレス/カートグラムの場合、最初にサイズで形状を変更し、機能でシェーディングします。

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

これにより、次のようなプロットが得られるはずです。

ここに画像の説明を入力

急いで作ったので良かったら教えてください

于 2016-12-09T17:14:57.037 に答える