最近、次の本を読んで日本地図を描くのにハマっている。
ggplot2 でシンプルに日本地図を描くとこんな感じになる。
library(tidyverse) library(sf) library(NipponMap) shp <- system.file("shapes/jpn.shp", package = "NipponMap") pref <- read_sf(shp) %>% filter(name != "Okinawa") ggplot(pref) + geom_sf()
このとき、デフォルトでは x軸と y軸に経度と緯度が表示される。
これ、いらなくないですか? しかもこれ (axes) を消すのはけっこう面倒なコードを書く必要がある。
ggplot(pref) + geom_sf() + theme(axis.ticks = element_blank(), # tickの線を消す axis.text = element_blank(), # tickの数字を消す axis.title = element_blank(), # 軸のラベルを消す axis.line = element_blank()) # 軸の線を消す
今回はこれ (axes) を消す方法をいろいろと調べてみたので紹介する。
1. シンプルなテクニック
axes を消すシンプルなテクニックがある。
guides(x = "none", y = "none")
とする方法だ。
ggplot(cars) + geom_point(aes(speed, dist)) + guides(x = "none", y = "none")
しかし、これはなぜか geom_sf()
で書いた地図ではうまくいかない。
# なぜかうまくいかない ggplot(pref) + geom_sf() + guides(x = "none", y = "none")
代わりに、coord_sf()
の label_axes
を指定することで axes を消すことができる。
ggplot(pref) + geom_sf() + coord_sf(label_axes = "-")
こういったシンプルなテクニックを知っていれば axes は容易に消すことができる。
ただし、この方法の問題点として、コードを読んだとき、ぱっと見なにをしているのか分かりにくいということがある。
2. ggeasy パッケージ
先日、yutannihilation さんの YouTube 配信を聞いていて知った ggeasy パッケージには、簡単に axes を消す関数が用意されている。
library(ggeasy) ggplot(pref) + geom_sf() + easy_remove_axes()
この関数はけっこう柔軟に axes の一部だけ消すことができる。
# tickの線だけ消す ggplot(pref) + geom_sf() + easy_remove_axes(what = "ticks") # x軸の axes だけを消す ggplot(pref) + geom_sf() + easy_remove_axes(which = "x") # x軸の tick の線と y軸の tick の数字だけを消す ggplot(pref) + geom_sf() + easy_remove_axes(which = "x", what = "ticks") + easy_remove_axes(which = "y", what = "text")
3. テーマを変える
上記の方法では柔軟に一部分だけ消すというようなことができた。
そんなことはできなくていいという人には、テーマ (theme) を変えて消すという方法もある。
ggplot(pref) + geom_sf() + theme_void()
背景が真っ白になってしまったが、地図の場合はこれで困る人はいないだろう。
他にも cowplot パッケージの theme_nothing()
というのもある。
ggplot(pref) + geom_sf() + cowplot::theme_nothing()
cowplot パッケージには地図用のテーマがあり、これを使っても消すことができる。
ggplot(pref) + geom_sf() + cowplot::theme_map()
追記: ggforce パッケージには theme_no_axes()
という関数がある。
ggplot(pref) + geom_sf() + ggforce::theme_no_axes(base.theme = theme_minimal())