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実装と解説 対応のない2標本の母平均の差の検定(母分散が異なる) [latexpage] 母分散が異なるの場合の対応のない2標本の母平均の差の検定とは、2つの母集団が正規分布に従い、ともに母分散が異なるとき、一方の母平均が他方の母平均と「異なる」または「大きい」、「小さい」かどうかを、検定統計量がt分布に従うことを利用して検定します。 統計的検定の流れ 検定の大まかな流れを確認しておきます。 […]
  • Eclipseにe(fx)clipseをインストールできない場合の対処方法Eclipseにe(fx)clipseをインストールできない場合の対処方法 Eclipseにe(fx)clipseをインストールできない場合の対処方法を備忘記録として残しておく。e(fx)clipseのインストール手順はこちらのサイトで確認できる。 Eclipse Kepler (4.3.x)で、以下のエラーが出てインストールできない場合は、 1 つ以上の必須項目が見つからないため、インストールを完了できません。 Software […]
  • RaspberryPi Bluetoothスピーカーで音を出す方法 Raspberry Pi 3 Model B を用いてBluetoothスピーカーと接続した後、aplayコマンドがエラー出して音が出なかった問題の対応を備忘録として残しておく。 以下はすべてSSH接続によるCUIで行っている。 環境:Raspbian GNU/Linux 8.0 […]
  • これだけは抑えておきたい安全性分析の基本これだけは抑えておきたい安全性分析の基本 安全性分析とは、主に貸借対照表上の数値から支払能力を測定する分析である。企業が倒産する主な原因は資金不足によって起こるため、様々な観点から資金の状況を把握する必要がある。 ここでは、安全性分析の代表的な指標をいくつか紹介する。 流動比率 流動比率とは、1年以内に資金化できる流動資産と1年以内に返済しなければならない流動負債との比率から支払能力をみる指標である。 […]
R ggplot2を用いた2軸グラフの簡単な作成方法