Rのggplot2を用いて、2軸グラフを作成するための簡単な方法をお伝えします.
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")
[1] ‘3.3.3’

> packageVersion("cowplot")
[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)
R ggplot2を用いた2軸グラフの簡単な作成方法