2軸グラフは、グラフの縦軸(y軸)が左側と右側の両方にあり、それぞれ単位が異なるグラフのことを言います。
2軸グラフは、一般的に推奨されてはおりません。
そのため、ggplot2パッケージを用いた2軸グラフを作成するためには、scale_y_continuous()関数のsec.axis引数を
2軸グラフは、一般的に推奨されてはおりません。
そのため、通常の方法でggplot2パッケージを用いて2軸グラフを作成する方法は手間がかかります。
通常の方法は、scale_y_continuous()関数のsec.axis引数を設定することになります。
しかし、この方法は第2軸のラベルのみを設定するだけなので、第2軸のラベルと値の整合性の調整はコードの作成者自身が行う必要があります。
ここでは、一般的に推奨されていないとはいえ、時として必要になる2軸グラフを最小の労力で作成するために方法をお伝えします.
環境
Rの動作環境は次になります。
R --version
R version 4.1.0 (2021-05-18) -- "Camp Pontanezen"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
今回、使用するRのパッケージのバージョンは次になります。
packageVersion("ggplot2")
(out)[1] ‘3.3.3’
(out)
packageVersion("cowplot")
(out)[1] ‘1.1.1’
cowplotパッケージを用いた2軸グラフの簡単な作成方法
2軸グラフの作成のアイディアはとても簡単です。
2つのグラフを作成したあと、cowplotパッケージを用いて、それらを重ね合わせて表示するという方法になります。
実際のコードを次に記載します。
ここでは、irisデータを用いて、Sepal.Length列のヒストグラムおよび密度グラフの2軸グラフとし、さらにfacet_gridでSpecies列を適用することにします。
2つのグラフを重ね合わせるので、二番目のグラフのy軸を右側にしたり、背景色を除外したり、x軸のラベルを除外したりしております。
このような、やや複雑な2軸グラフでも問題ない2軸グラフとなっていることが確認できます。
library(ggplot2)
library(cowplot)
g1 <- ggplot(iris, aes(x = Sepal.Length))
g1 <- g1 + geom_density()
g1 <- g1 + facet_grid(. ~ Species)
g2 <- ggplot(iris, aes(x = Sepal.Length))
g2 <- g2 + geom_histogram()
g2 <- g2 + scale_y_continuous(position = "right")
g2 <- g2 + theme_half_open()
g2 <- g2 + theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())
g2 <- g2 + facet_grid(. ~ Species)
aligned_plots <- align_plots(g1, g2, align="hv", axis="tblr")
ggdraw(aligned_plots[[1]]) + draw_plot(aligned_plots[[2]])
2軸プロットを保存する場合は、次のようなコードになります。
cowplotパッケージのsave_plot()関数の詳細な指定方法はヘルプをご参照ください。
p <- ggdraw(aligned_plots[[1]]) + draw_plot(aligned_plots[[2]])
save_plot("sample.png", p)