ggplot2の軸の目盛りを10のべき乗で書く

ggplot2で、軸を”10のほげほげ乗”で描画するのに苦労したので、メモ。
ググった感じ、自作で関数作るしかないっぽい。

必要なライブラリと適当なデータを用意。

library("ggplot2")
library("scales")
library("stringr")
df <- data.frame(x=10^(-2:1),y=10^(-2:1))

scalesパッケージに入っているscientific_format()を使うとそれっぽくなる、なるが俺の欲しい形ではない。

ggplot(df, aes(x, y)) + 
  geom_point() + 
  scale_x_continuous(label=scientific_format()) + 
  scale_y_continuous(label=scientific_format())


そこで、参考先のリンクを真似て、以下の関数ような関数を定義し、ラベルの文字列を自分が望む形に操作するようにする。

scientific_10 <- function(x) {
  index_zero <- which(x == 0)
  label <- scientific_format()(x)
  label <- str_replace(label, "e", " %*% 10^")
  label <- str_replace(label, "\\^\\+", "\\^")
  label[index_zero] <- "0"
  parse(text=label)
}

これをlabelに指定するといい感じにラベルを作ってくれる。
カスタマイズしたければ↑の関数をいじる感じで。

ggplot(df, aes(x, y)) + 
  geom_point() + 
  scale_x_continuous(label=scientific_10) + 
  scale_y_continuous(label=scientific_10)


データを適当変更して、100〜1000程度範囲にしてもそれっぽく動くので、しばらくはこれで大丈夫だろう。

ENJOY!