まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

ggplotの軸の桁表示を制御する

ggplotで、桁数が大きいと自動でe+n表示へと変わる。
自分で分析する場合はいいが、この表示に慣れていない人に見せる際にわかりづらいので制御する。

まずはデフォルトでの表示。デフォルトでは107以降が存在する場合e+nの表示になる。

library(tidyverse)

values = tibble(a = seq(1000000,10000000,1000000), b =seq(1000000,10000000,1000000))

values %>% 
  ggplot(aes(a, b)) +
  geom_point() 

f:id:chito_ng:20200411154008p:plain

まずは、x軸をscales::label_commaを用いて1000桁毎にカンマを打つ(比較のためy軸はそのまま)

library(scales)

values %>% 
  ggplot(aes(a, b)) +
  geom_point() +
  scale_x_continuous(labels = label_comma()) # 1000桁毎にカンマ

f:id:chito_ng:20200411154643p:plain

次に、x軸を scales::label_number を用いて省略されていない生の値にする。

values %>% 
  ggplot(aes(a, b)) +
  geom_point() +
scale_x_continuous(labels = label_number()) # eで省略されないそのままの値

f:id:chito_ng:20200411154609p:plain

また、このとき値を変換しつつ接頭接尾に文字列を入れることもできる。
例えば、10000を10kとするように、単位kをつける場合値自体を1/1000して接尾にkをつける。

values %>% 
  ggplot(aes(a, b)) +
  geom_point() +
  scale_x_continuous(labels = label_number(scale = 1/1000, suffix = 'k')) # 単位k(1000)をつけるため値自体は1/1000する

f:id:chito_ng:20200411155330p:plain

また、label_number_siでK,M,B,T,...と動的に単位を変えて表示することもできる。

values = tibble(a = seq(100000,1000000,100000), b =seq(100000000000,1000000000000,100000000000))

values %>% 
  ggplot(aes(a, b)) +
  geom_point() +
  scale_x_continuous(labels = label_number_si()) + # 単位を自動でつけて常に数値は3桁になるようにする
  scale_y_continuous(labels = label_number_si()) # yも同様

f:id:chito_ng:20200411160237p:plain

この他にも、label_percentでパーセンテージ対応をしたり、label_scientificで任意のe+nにするなど色々な値に対して対応できる。

参考

bookdown.org