ねこすたっと

ねこの気持ちと統計について悩む筆者の備忘録的ページ。

空間データを可視化する(2)(sfパッケージ) [R]

はじめに

Rのsfパッケージを使って、神戸市の校区境界と学校所在地をプロットしようとしています。前回はデータのダウンロードから加工(部分抽出・変数追加)までやってみました。

necostat.hatenablog.jp

今回はプロットしてみます。

GISデータをプロットしてみる

例1:plot( )を使う

まずは中学校区を標準のplot( )を使ってみます。

plot(MS_poly_kobe)

各属性データにもとづいて塗り分けられた図が作成されました。

3番目の図だけ欲しかったら、

plot(MS_poly_kobe[3])

とします(出力は割愛)。

例2:geom_sf( )を使う

ggplot2での作図に慣れている人は、geom_sf( )を使うと便利です。

ggplot() +
  geom_sf(data = ES_poly_kobe) +
  theme_minimal()

例3:離散変数に従って塗り分ける

3つのカテゴリーをランダムに割り当てた離散変数に従って、小学校区を塗り分けてみます。 面を塗る色を指定する引数はfill、境界線の色を指定する引数はcolourです。

ggplot() +
  geom_sf(data = ES_poly_kobe, aes(fill = rnd_cat), colour = "white") +
  theme_minimal() 

例4:連続変数に従って塗り分ける

次はランダムに作成した連続変数に従って塗り分けてみます。

ggplot() +
  geom_sf(data = ES_poly_kobe, aes(fill = rnd_cont)) +
  scale_fill_gradient(low = "#FFFFFF", high = "#336699") +
  theme_minimal()

例5:複数の図を重ねる

geom_sf( )を使えば、複数の図を重ねることも簡単です。 中学校区境界の白地図に、中学校所在地を重ねてみましょう。 所在地のプロットの色は連続カラースケールにしてみます。

ggplot() +
  geom_sf(data = MS_poly_kobe, fill = "white") +
  geom_sf(data = MS_point_kobe, aes(colour = rnd_cont)) +
  scale_colour_gradient(low = "#FF6B6B", high = "#336699") +
  theme_minimal()

レイヤーの順序を入れ替えるときは注意が必要です。面データを後から重ねるときは、下のように透過度100%(alpha=0)にしておかないと、先にプロットした所在地が見えなくなってしまいます。

ggplot() +
  geom_sf(data = MS_point_kobe, aes(colour = rnd_cont)) +
  geom_sf(data = MS_poly_kobe, alpha = 0) +
  scale_colour_gradient(low = "#FF6B6B", high = "#336699") +
  theme_minimal()

出力は省略します。

おわりに

  • 元々の属性にある「学校名」などに従って塗り分けるときは、凡例を表示しないようにしておく方がいいです。
ggplot() +
  geom_sf(data = ES_poly_kobe, aes(fill = A27_004), alpha = 0.5) +
  theme_minimal() + 
  theme(legend.position = "none")
  • 久しぶりの投稿ですが、猫2匹は元気にしています。

参考資料

  • GISデータに関する基礎的な解説がわかりやすいです。

www.esrij.com