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!