備忘ログ

チラシの裏的備忘録&メモ

ggplotでグラフの軸を回転させる方法+鉛直線・水平線を書くときの注意

Rのggplotでグラフの軸を回転させる方法(y軸が水平、x軸が垂直になるようにちょうど90°回転するように、横にする)と、回転させたときにそのグラフに鉛直線(縦線)や水平線(横線)を書くときの注意について。

indenkun.hatenablog.com

この記事でRのggplotで水平線を書くときにあれって思って、メモ。

ggplotでグラフの軸を回転させる方法

Rの組み込みデータのIRIS(あやめ)データをつかって種類ごと(species)のがく片の長さ(Sepal.Length)をボックスプロットする。

library(ggplot2)
gg <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_boxplot()
gg

f:id:indenkun:20200630224207p:plain

それで、これを回転させたければcoord_filp()と追加すればOK。

gg2 <- gg +
  coord_flip()
gg2

f:id:indenkun:20200630224223p:plain

そもそも最初のggのときにxとyを入れ替えるだけでも軸が入れ替わる(最初のグラフが横倒し、gg2相当になる)が、今回はcoord_flip()で回転してみるとこの次鉛直線や水平線をかくときに注意が必要って言う話をしたい。

鉛直線・水平線を書くときの注意

最初の横に3つ並ぶ普通のボックスプロットにがく片の長さの平均で水平線を引いておきたいと思ったら、geom_hline()で追加できる。

gg +
  geom_hline(yintercept = mean(iris$Sepal.Length))

f:id:indenkun:20200630224235p:plain

通常、鉛直線はgeom_vline()でかけるのだが、coord_flip()で回転させたgg2では下記のコードでは鉛直線がかけない。

gg2 +
  geom_vline(xintercept = mean(iris$Sepal.Length))

f:id:indenkun:20200630224246p:plain

なぜなら、geom_vline()はグラフのx軸へ直交する線を書くのだがグラフが回転していて人間の目にはx軸ががく片の長さになっているようにみえるが、処理上はy軸が横倒しになっているだけだから。

coord_filp()で回転させたグラフgg2に縦線を書きたければ、

gg2 +
  geom_hline(yintercept = mean(iris$Sepal.Length))

f:id:indenkun:20200630224256p:plain

とgeome_hline()、つまり横倒しになっているy軸に直行する直線を書く必要がある。

意外と間違えやすい点だと思う。