LoginSignup
11

More than 5 years have passed since last update.

choroplethr - Vignettes - i) 自分の地図を作る

Last updated at Posted at 2015-01-12

Rのパッケージchoroplethrのビネットの翻訳です.
( 原文: http://cran.r-project.org/web/packages/choroplethr/index.html )


i) 自分の地図を作る

choroplethrはユーザが任意の地図のコロプレス図を作成するのをサポートするために,オブジェクト指向プログラミングを利用しています.もしこの機能に興味がある場合は,先に進むまえに以下の2つの解説を読むことをお勧めします.

  • Rプログラマのための地図作製法. このページではシェープファイルの取得や操作,またRにシェープファイルをインポートする方法に関する基本事項を扱っています.自分の地図を作ることに興味がある場合,まずはこの程度の情報については知っておくべきでしょう.

  • R6クラス入門. choroplethrはオブジェクト指向プログラミングの実装にR6を使っています.自分で地図を作る場合は必ずChoropleth基底クラスを継承すべきです.このことが何を意味しているのか,基本的なことを理解しておく必要があります.

Choropleth基底クラス

共通の機能を見出して基底クラスにまとめるのがオブジェクト指向プログラミングのカギです.そうすることでクライアント側は多くの共通した反復的な処理を「タダで」手に入れることができます.バージョン2.0のchoroplethrパッケージにおける基底クラスはChoroplethと呼ばれ,5つの主要な関数を持っています.もし自分でコロプレス図作成プログラムを作ろうと思えば,(少なくとも)これら5つのステップが必要になるでしょう.

  1. initialize(map.df, user.df). この関数はコンストラクタです.map.dfはシェープファイルをdata.frameで表現したものであり,"region"列が必要です.user.dfはユーザのデータであり,"region"列と"value"列が必要です.この関数は入力に対して基本的なエラーチェックを行います.

  2. clip(). この関数は,user.dfから地図上に存在しない地域の要素を取り除きます.たとえば,50の州とプエルトリコとワシントンDCのデータを持っている場合があるかもしれませんが,その場合,地図に描画されない地域は取り除いて,discretize()を呼ぶ前にユーザに警告を出すべきでしょう.

  3. discretize(). 州別の人口といった連続的な数値を,離散的な値にする必要があります.たとえば,各州の人口に基づいて七色のうち一色を各州に割り当てたい,という場合があるかもしれません.

  4. bind(). 離散化された値を地図に結びつける必要があります.また,データセットが地図上の全ての値を含んでいない場合には,ユーザに警告を出したいと思うかもしれません.

  5. render(). 最後のステップは結果を描画することです.最終結果の描画は簡単なこともあれば,複雑なこともあります.たとえば,アメリカの50州を正しいスケールで描画するのはかなり容易ですが,アラスカとハワイを埋め込むのは大変です.

例:世界地図

Choropleth基底クラスの機能を使えば,国単位のコロプレス図を簡単に作成することができます.世界地図の詳細が知りたい場合はdata(country.map); ?country.mapとタイプしてください.

library(choroplethr)
library(choroplethrMaps)
library(R6)
library(Hmisc)
library(stringr)
library(dplyr)
library(scales)d
library(ggplot2)

# Choropleth基底オブジェクトを継承してクラスを作成
CountryChoropleth = R6Class("CountryChoropleth",
  inherit = choroplethr:::Choropleth,
  public = list(

    # 世界地図の初期化
    initialize = function(user.df)
    {
      data(country.map, package="choroplethrMaps")
      super$initialize(country.map, user.df)
    }
  )
)

# サンプルデータの作成と描画

data(country.regions, package="choroplethrMaps")
df = data.frame(region=country.regions$region, value=sample(1:nrow(country.regions)))
c  = CountryChoropleth$new(df)
c$render()

your-own-map.png

この場合,基底クラスはデフォルトで望ましい振る舞いをしてくれます.必要なのは自分の地図でオブジェクトを初期化することだけです.

$new()で地図を作成して$render()を呼ぶだけで地図を描画することができます.地図のカスタマイズの例として,country_choropleth関数を見てみましょう.

country_choropleth
## function (df, title = "", legend = "", buckets = 7, zoom = NULL) 
## {
##     c = CountryChoropleth$new(df)
##     c$title = title
##     c$legend = legend
##     c$set_buckets(buckets)
##     c$set_zoom(zoom)
##     c$render()
## }
## <environment: namespace:choroplethr>

Choropleth基底クラスを使えば,多くの機能をタダで手に入れることができます.

  • 入力のエラーチェック
  • zoomパラメータを使って地域の一部分にズームインする機能.
  • bucketsパラメータを使ってデータをビジュアルに探索する機能
  • titleパラメータとlegendパラメータで簡単にタイトルと凡例を作成する機能

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11