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 スティール・ドゥワス(Steel-Dwass)法R スティール・ドゥワス(Steel-Dwass)法 スティール・ドゥワス(Steel-Dwass)法とは、テューキー(Tukey)法の多重比較に対応するノンパラメトリックな多重比較である。 スティール・ドゥワス法を簡単に言うと、正規分布を仮定しない各群間を順位を用いて多重比較で調べる方法である。 Rで、スティール・ドゥワス法を使う場合は、「スティール・ドゥワス(Steel-Dwass)の方法による多重比較」のページにソ […]
  • R knitrで特定ページを横向きにしてPDF出力する方法R knitrで特定ページを横向きにしてPDF出力する方法 knitrでレポートをPDF出力する際に、ある特定ページだけ横向きにする方法をお伝えする。 まずは、事前準備として本体となるファイルの同一ディレクトリに「header.tex」として、次の内容を書き込んで保存しておく。 これは、このファイルが読み込まれた時に、「lscape」パッケージを読み込んで、 「\blandscape」「\enlandscape」と記述してある場 […]
  • Python pyqueryを用いて簡単にウェブスクレイピングPython pyqueryを用いて簡単にウェブスクレイピング Pythonでpyqueryパッケージを用いて、ウェブスクレイピングを行う方法をご紹介する。ウェブ上には様々なデータがあるが、必要なデータがいつもファイルとしてダウンロードできるとは限らない。ここでご紹介する方法は、htmlファイルを直接解析して、必要な情報を取得するという方法である。 それでは、さっそく見ていこう。 Ubuntu […]
  • Ubuntu18.04で任意のバージョンのNode.jsをインストールする方法Ubuntu18.04で任意のバージョンのNode.jsをインストールする方法 Ubuntu18.04で、任意のバージョンのNode.js環境を構築する方法をお伝えいたします。 aptコマンドによりNode.jsをインストールしようとすると、かなり古いバージョンがインストールされます。 そのため、最新または任意のバージョンをインストールするときは、PPA(personal package […]
  • R,knitPDF bxjsarticleを用いた際にサブタイトルでエラーが出る場合の対処法 RStudioを用いてRmdファイルから日本語PDFを作成する際に、ドキュメントクラスをbxjsarticleと設定すると、次のようなエラーが出てPDFファイルが作成されない。 エラーは、subtitleコマンドが二重に定義されているために起こっているようだ。 ! LaTeX Error: Command \subtitle already defined. Or […]
R ggplot2を用いた2軸グラフの簡単な作成方法