本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:アクセシブルな配色と統一されたテーマを適用できる「ekioplot」パッケージの紹介

「ekioplot」パッケージは、ggplot2で作成したグラフに統一感のある配色とテーマを適用できます。データフレームと列名を渡すだけで、棒グラフや散布図などの各コマンドが配色とフォントのそろった図を描きます。背景色に対して読みやすい文字色を選ぶコマンドも備えています。資料や報告書で複数の図の見た目をそろえたい人におすすめできるのではないかと考えます。

パッケージバージョンは1.1.0。Windows 11 x64 (build 26200)のR version 4.6.1で確認しています。

パッケージのインストール

下記コマンドを実行してください。

# パッケージのインストール
install.packages("ekioplot")

# パッケージの読み込み
library("ekioplot")
スポンサーリンク

コマンド例

ekioplotが提供するプロット用のコマンドは、いずれもデータフレームとX軸・Y軸に使う列名をそのまま渡す形式です。fillやcolorに離散変数を渡すと、paletteオプションで指定した配色が自動的に割り当てられます。連続変数を渡すとエラーになるため、あらかじめfactor()で囲むなどして離散変数に変換してください。

プロット用のコマンドとは別に、配色パレットを直接取得するekio_palコマンド、背景色に応じて読みやすい文字色を選ぶekio_text_onコマンド、既存のggplot2のグラフに統一したテーマを適用するtheme_ekioコマンドも用意されています。

以降の例では、京都府内5つの直売所を想定した架空の売上データを使います。

# 京都府内5直売所×12か月×4品目の組み合わせを作成
kyoto_ichiba <- expand.grid(
  直売所 = c("嵐山", "亀岡", "舞鶴", "南丹", "伊根"),
  月 = 1:12,
  品目 = c("九条ねぎ", "賀茂なす", "万願寺とうがらし", "京たけのこ")
)

# 乱数の種を固定
set.seed(913)

# 月ごとに変動する来客数を生成
kyoto_ichiba$客数 <- round(80 + 40 * sin((kyoto_ichiba$月 - 3) / 12 * 2 * pi) + rnorm(nrow(kyoto_ichiba), sd = 10))

# 来客数に応じた販売額を生成
kyoto_ichiba$販売額 <- round(kyoto_ichiba$客数 * (300 + rnorm(nrow(kyoto_ichiba), sd = 40)))

# 月ごとに変動する平均気温を生成
kyoto_ichiba$気温 <- round(15 + 10 * sin((kyoto_ichiba$月 - 4) / 12 * 2 * pi) + rnorm(nrow(kyoto_ichiba), sd = 1.5), 1)

背景色に適した文字色の選択:ekio_text_onコマンド

ekio_text_onコマンドは、指定した背景色に対して読みやすい文字色(darkまたはlightのいずれか)を選びます。背景色は複数まとめて渡すこともできます。

オプション意味初期値
background文字色を判定する背景色。16進数カラーコードまたはRのカラー名(複数指定可)なし
dark暗い文字色の候補“black”
light明るい文字色の候補“white”
# 背景色(青の700番相当)に対して読みやすい文字色を判定
ekio_text_on(ekio_pal("blue")["700"])
    700
"white"


# 青のパレット全体を背景色として渡し、それぞれに読みやすい文字色を判定
ekio_text_on(ekio_pal("blue"))
    100     200     300     400     500     600     700     800     900
"black" "black" "black" "black" "white" "white" "white" "white" "white"


# フルカラーパレットを背景色として渡し、暗い文字色の候補を濃い灰色に指定
ekio_text_on(ekio_pal("full"), dark = ekio_pal("gray")["900"])
[1] "white"   "#191A1C" "white"   "#191A1C" "white"   "white"   "white"
[8] "#191A1C"

積み上げ面積グラフの描画:ekio_areaplotコマンド

ekio_areaplotコマンドは、面グラフを描画します。fillに離散変数を渡すと品目ごとに色分けされ、positionを”fill”にすると構成比で積み上げられます。

オプション意味初期値
data使用するデータフレームなし
xX軸に使う変数なし
yY軸に使う変数なし
fill塗りつぶしに使う色、または離散変数。連続変数を渡すとエラーになるため、あらかじめbin化するかfactor()で囲むNULL
palette変数を色にマッピングする際のパレット名NULL
position積み上げ方法。「stack」(既定)で通常の積み上げ、「fill」で構成比による積み上げ“stack”
alpha塗りつぶしの透明度1
titleグラフタイトル。NULL(既定)では表示しないNULL
subtitleサブタイトル。NULL(既定)では表示しないNULL
captionキャプション。NULL(既定)では表示しないNULL
…ggplot2::geom_area()へ渡す追加オプション。テーマ側の既定値より優先されるなし
# 亀岡の直売所データを抽出
kameoka <- subset(kyoto_ichiba, 直売所 == "亀岡")

# 月別の来客数を合計
kameoka_total <- aggregate(客数 ~ 月, data = kameoka, FUN = sum)

# 月別来客数の推移を面グラフで表示
ekio_areaplot(kameoka_total, 月, 客数)

# 品目別の月別販売額を積み上げ面グラフで表示
ekio_areaplot(kameoka, 月, 販売額, fill = 品目)

月別来客数の推移を面グラフで表示

品目別の月別販売額を積み上げ面グラフで表示

棒グラフの描画:ekio_barplotコマンド

ekio_barplotコマンドは、棒グラフを描画します。horizontalをTRUEにすると横向きの棒グラフになります。

オプション意味初期値
data使用するデータフレームなし
xX軸に使う変数なし
yY軸に使う変数なし
fill塗りつぶしに使う色、または離散変数。連続変数を渡すとエラーになるため、あらかじめbin化するかfactor()で囲むNULL
palette変数を色にマッピングする際のパレット名NULL
horizontal棒グラフを横向きにするかどうかFALSE
bar_width棒の幅0.8
titleグラフタイトル。NULL(既定)では表示しないNULL
subtitleサブタイトル。NULL(既定)では表示しないNULL
captionキャプション。NULL(既定)では表示しないNULL
…ggplot2::geom_col()へ渡す追加オプション。テーマ側の既定値より優先されるなし
# 品目別の年間販売額を集計
hinmoku_total <- aggregate(販売額 ~ 品目, data = kyoto_ichiba, FUN = sum)

# 品目別の年間販売額を棒グラフで表示
ekio_barplot(hinmoku_total, 品目, 販売額)

品目別の年間販売額を棒グラフで表示

ヒストグラムの描画:ekio_histogramコマンド

ekio_histogramコマンドは、ヒストグラムを描画します。binsまたはbinwidthでビンの分け方を指定できます。

オプション意味初期値
data使用するデータフレームなし
x対象の変数なし
fill塗りつぶしに使う色、または離散変数。NULLの場合はEKIOブルーを使う。連続変数を渡すとエラーになるため、あらかじめbin化するかfactor()で囲むNULL
palette変数を色にマッピングする際のパレット名NULL
binsビンの分け方。「sturges」「FD」「scott」または数値“sturges”
binwidthビンの幅(指定するとbinsより優先される)NULL
border_colorヒストグラムの輪郭の色“white”
titleグラフタイトル。NULL(既定)では表示しないNULL
subtitleサブタイトル。NULL(既定)では表示しないNULL
captionキャプション。NULL(既定)では表示しないNULL
…ggplot2::geom_histogram()へ渡す追加オプション。テーマ側の既定値より優先されるなし
# 客単価(販売額を客数で割った値)を算出
kyoto_ichiba$客単価 <- round(kyoto_ichiba$販売額 / kyoto_ichiba$客数)

# 客単価の分布をヒストグラムで表示
ekio_histogram(kyoto_ichiba, 客単価)

# 塗りつぶし色をsteelblueに指定してヒストグラムを表示
ekio_histogram(kyoto_ichiba, 客単価, fill = "steelblue")

# 直売所ごとに色分けしたヒストグラムを表示
ekio_histogram(kyoto_ichiba, 客単価, fill = 直売所, palette = "full")

客単価の分布をヒストグラムで表示

塗りつぶし色をsteelblueに指定してヒストグラムを表示

直売所ごとに色分けしたヒストグラムを表示

折れ線グラフの描画:ekio_lineplotコマンド

ekio_lineplotコマンドは、折れ線グラフを描画します。add_zeroをTRUEにするとy=0の位置に水平線が加わります。

オプション意味初期値
data使用するデータフレームなし
xX軸に使う変数なし
yY軸に使う変数なし
color線の色、または離散変数。連続変数を渡すとエラーになるため、あらかじめbin化するかfactor()で囲むNULL
palette変数を色にマッピングする際のパレット名NULL
add_zeroy=0の位置に水平線を加えるかどうかFALSE
line_width線の太さ0.8
titleグラフタイトル。NULL(既定)では表示しないNULL
subtitleサブタイトル。NULL(既定)では表示しないNULL
captionキャプション。NULL(既定)では表示しないNULL
…ggplot2::geom_line()へ渡す追加オプション。テーマ側の既定値より優先されるなし
# 亀岡の月別平均気温を集計
kameoka_temp <- aggregate(気温 ~ 月, data = kameoka, FUN = mean)

# 月別平均気温の推移を折れ線グラフで表示
ekio_lineplot(kameoka_temp, 月, 気温)

月別平均気温の推移を折れ線グラフで表示

配色パレットの取得:ekio_palコマンド

ekio_palコマンドは、指定したパレットの色を文字ベクトルとして取得します。取得する色数はn、順序の反転はreverseで指定します。

オプション意味初期値
paletteパレット名“full”
n取得する色数。NULL(既定)では全色を返す。「accent_blue」「accent_orange」はNULLのとき4色を返す。連続・divergingパレットはn色を全域から補間し、2種類のアクセントパレットは2〜6色を指定できる。「gold」などのカテゴリカルパレットと科学系パレットは先頭からn色を取り、パレットの色数を超える場合のみ補間するNULL
reverseTRUEにするとパレットの順序を反転するFALSE
# フルカラーパレットを取得
ekio_pal("full")

# 4色に絞ったパレットを取得
ekio_pal("full", n = 4)

# パレットの順序を反転して取得
ekio_pal("full", reverse = TRUE)

# アクセントブルーの5色パレットを取得
ekio_pal("accent_blue", n = 5)

# okabe_itoパレットを取得
ekio_pal("okabe_ito")

# ブランドの配色は濃淡ごとに名前が付いており、位置iは濃淡i×100に対応する
# 特定の濃度の青色を取得
ekio_pal("blue")["700"]
      700
"#1E3A5F"


# インデックスを指定して青色を取得
ekio_pal("blue")[7]
      700
"#1E3A5F"


# goldは番号ではなく名前で色を指定するアクセントカラー
# 名前を指定してゴールドを取得
ekio_pal("gold")["mid"]
      mid
"#B88715"

フルカラーパレットを取得

4色に絞ったパレットを取得

パレットの順序を反転して取得

アクセントブルーの5色パレットを取得

okabe_itoパレットを取得

散布図の描画:ekio_scatterplotコマンド

ekio_scatterplotコマンドは、散布図を描画します。add_smoothをTRUEにすると回帰直線などの平滑化した傾向線を重ねられます。

オプション意味初期値
data使用するデータフレームなし
xX軸に使う変数なし
yY軸に使う変数なし
color点の色、または変数。連続変数を渡すと警告のうえ連続的な配色になるNULL
size点の大きさに使う変数(省略可)NULL
palette変数を色にマッピングする際のパレット名NULL
add_zeroy=0の位置に水平線を加えるかどうかFALSE
add_smooth平滑化した傾向線を加えるかどうかFALSE
smooth_method平滑化の方法。「lm」「gam」「loess」“lm”
point_size点の基本サイズ2.5
point_alpha点の透明度0.8
titleグラフタイトル。NULL(既定)では表示しないNULL
subtitleサブタイトル。NULL(既定)では表示しないNULL
captionキャプション。NULL(既定)では表示しないNULL
…ggplot2::geom_point()へ渡す追加オプション。テーマ側の既定値より優先されるなし
# 気温と来客数の関係を散布図で表示
ekio_scatterplot(kyoto_ichiba, 気温, 客数)

# 品目ごとに色分けした散布図を表示
ekio_scatterplot(kyoto_ichiba, 気温, 客数, color = 品目)

気温と来客数の関係を散布図で表示

品目ごとに色分けした散布図を表示

グラフへのテーマの適用:theme_ekioコマンド

theme_ekioコマンドは、既存のggplot2のグラフに統一したテーマを適用します。font_titleとfont_textで、タイトルとそれ以外の文字要素のフォントを別々に指定できます。

オプション意味初期値
base_size基準フォントサイズ11
font_titleグラフタイトルにのみ適用するフォント“Lora”
font_textタイトル以外の文字要素に適用するフォント“Lato”
title_alignggplot2::theme()に渡すオプション。「plot」または「panel」“plot”
grid表示する主目盛線。「y」(既定)「x」「xy」「none」のいずれかで、指定した方向のみ描画する“y”
ticks表示する軸目盛と軸線。「x」(既定)「y」「xy」「none」のいずれかで、gridとは独立して指定する“x”
backgroundプロットとパネルの背景。「offwhite」(既定、#FEFEFE)「white」(#FFFFFF)「gray」(ブランドカラーのgray.100)「transparent」のいずれか“offwhite”
…ggplot2::theme_minimal()へ渡す追加オプションなし
# 気温と来客数の散布図にカスタムテーマを適用
ggplot2::ggplot(kyoto_ichiba, ggplot2::aes(気温, 客数)) +
  ggplot2::geom_point() +
  theme_ekio(font_title = "serif", font_text = "sans")

気温と来客数の散布図にカスタムテーマを適用


この記事が誰かの役に立ちますように。

スポンサーリンク
価格および配送状況は変更される場合があります。購入時は商品ページをご確認ください。
当サイトに表示されている商品情報はAmazonから提供されたものであり、更新または削除される場合があります。
karada-goodはAmazonアソシエイトとして、適格販売により収入を得ています。