Rでカルトグラムを作る
カルトグラムとは統計データに基づいて面積や距離を伸縮した地図のこと。
以下のサイトでScapetoadというソフトを使った事例が掲載されていて、やりたくてうずうずしていたのだがなぜか自分の環境ではうまく動かない。
http://d.hatena.ne.jp/naraba/20110820/p1
悔しいのでRの実装例ないかなと思って探してみると、あった。
https://r-forge.r-project.org/R/?group_id=901
ということで以下にコード例。
こんな感じの図になるはず。
アメリカの州別データをプロットしている。なお、今回用いたusapopはアメリカの州別人口データだが、図を極端にするためにダミーとしてアラバマの数値のみ大きな値に変えている
library(cart) #プロット用のデータ data(usapop) rownames(usapop) <- tolower(rownames(usapop)) need <- rownames(usapop) %in% c("alaska","hawaii","u.s. average") uspop <- data.frame(population=usapop[!need,]) rownames(uspop) <- rownames(usapop)[!need] uspop$population <- 100 uspop["alabama",] <- 10000 #プロット用の地図 usmap <- map("state", fill = TRUE, plot = FALSE) sp <- map2SpatialPolygons(usmap, sub(":.*", "", usmap$names)) #データと地図を結合してカルトグラムを描画 spdf <- SpatialPolygonsDataFrame(sp, uspop, match.ID = TRUE) cart <- cartogram(spdf) plot(cart, axes = FALSE, asp = 1/2, col = 1:nrow(uspop))