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

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

Rで解析:ggplot2の配色・テーマ・図形を拡張する「see」パッケージの紹介

「see」パッケージは、ggplot2で描いたグラフの配色やテーマ、点や分布の見せ方を整えるための拡張です。easystatsシリーズのモデル可視化に加えて、普段のggplot2のコードにそのまま重ねて使えます。図の体裁を手早くそろえたい人におすすめです。

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

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

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

# パッケージのインストール
install.packages("see")
# パッケージの読み込み
library("see")
# コマンド例実行で必要なパッケージを読み込み
library("ggplot2")
スポンサーリンク

コマンド例

詳細はコメント、パッケージのヘルプを確認してください。

seeのコマンドは大きく3系統に分かれます。scale_ で始まる配色スケール、theme_ で始まるテーマ、geom_ や coord_ で始まる図形と座標系です。いずれもggplot2の + でつなぐ記法に従うため、既存のグラフの末尾に足すだけで見た目が変わります。

配色スケールは、色覚の多様性に配慮したOkabe-Ito配色や、Material Designの色群など、あらかじめ用意された色の組を離散・連続の別に呼び出します。テーマは目盛や余白、凡例の位置をまとめて調整します。図形は、片側だけのバイオリンや、分布と点を重ねた表示など、ggplot2の標準にはない見せ方を追加します。

ここでは、京都府内の宇治茶の産地4か所(宇治市・和束町・南丹市・京丹後市)で採取した新芽のテアニン含有量と萎凋歩合、および主要3品種の官能評価点を模した擬似データを共通データとして使用します。

# 乱数シードの固定
set.seed(2026)
# 対象とする宇治茶の産地
産地 <- c("宇治市", "和束町", "南丹市", "京丹後市")
# 各産地の茶園から採取した新芽のテアニン含有量(mg/100g)と萎凋歩合(%)
茶葉 <- data.frame(
  産地 = rep(産地, each = 45),
  テアニン = round(c(rnorm(45, 1360, 130), rnorm(45, 1290, 110),
                     rnorm(45, 1180, 150), rnorm(45, 1230, 120))),
  萎凋歩合 = round(c(rnorm(45, 12, 2.2), rnorm(45, 14, 2.0),
                     rnorm(45, 10, 1.8), rnorm(45, 11, 2.4)), 1))
# 産地ごとの平均値をまとめた集計表
産地平均 <- aggregate(cbind(テアニン, 萎凋歩合) ~ 産地, data = 茶葉, FUN = mean)
# 宇治茶の主要3品種を5つの観点で官能評価した点数(10点満点)
官能 <- data.frame(
  評価項目 = rep(c("香り", "甘み", "渋み", "こく", "水色"), times = 3),
  品種 = rep(c("さみどり", "ごこう", "おくみどり"), each = 5),
  点数 = c(8.2, 7.4, 6.1, 7.9, 8.4,
           7.1, 8.5, 5.3, 8.2, 7.5,
           7.7, 6.9, 7.2, 6.8, 7.3))

[塗りつぶしをOkabe-Ito配色にする]:scale_fill_okabeitoコマンド

scale_fill_okabeitoは、Okabe-Ito配色を塗りつぶしの色に割り当てます。paletteで色の組を、orderで使用する色の順番を選び、reverseにTRUEを渡すと色の並びが逆になります。色相の差がはっきりしており、印刷や色覚の条件が異なる環境でも見分けやすい配色です。

オプション意味初期値
palette使用するパレット名。離散スケールでは “full”、”ice”、”rainbow”、”complement”、”contrast”、”light”(暗いテーマ向け)、”black_first” などから選ぶ“full”
reverseパレットの色順を逆にするかFALSE
order1から9までの数値ベクトルで、使用する色の順序を指定する1:9
aestheticsこのスケールを適用する審美的属性の名前のベクトル“fill”
colorRampPalette() へ渡す追加のオプションなし
# 産地ごとの平均テアニン含有量を棒グラフにし、Okabe-Ito配色を適用する
ggplot(産地平均, aes(x = 産地, y = テアニン, fill = 産地)) +
  geom_col() +
  scale_fill_okabeito()

# 色順を逆にし、3番目以降の色から使う
ggplot(産地平均, aes(x = 産地, y = テアニン, fill = 産地)) +
  geom_col() +
  scale_fill_okabeito(reverse = TRUE, order = 3:9)

産地ごとの平均テアニン含有量を棒グラフにし、Okabe-Ito配色を適用する

色順を逆にし、3番目以降の色から使う

[塗りつぶしをMaterial Design配色にする]:scale_fill_materialコマンド

scale_fill_materialは、Material Designの色群を塗りつぶしに割り当てます。discreteで離散・連続を切り替え、paletteで「ice」や「contrast」などの部分集合を選べます。落ち着いた中間色が多く、区分の数が少ないグラフに向きます。

オプション意味初期値
palette使用するパレット名。”full”、”ice”、”rainbow”、”contrast”、”light” などから選ぶNULL
discrete色の審美的属性が離散かどうかを示す論理値TRUE
reverseパレットの色順を逆にするかFALSE
aestheticsこのスケールを適用する審美的属性の名前のベクトル“fill”
colorRampPalette() へ渡す追加のオプションなし
# 産地ごとのテアニン含有量の箱ひげ図にMaterial Design配色を適用する
ggplot(茶葉, aes(x = 産地, y = テアニン, fill = 産地)) +
  geom_boxplot() +
  scale_fill_material()

# 寒色系のiceパレットに切り替え、色順を逆にする
ggplot(茶葉, aes(x = 産地, y = テアニン, fill = 産地)) +
  geom_boxplot() +
  scale_fill_material(palette = "ice", reverse = TRUE)

産地ごとのテアニン含有量の箱ひげ図にMaterial Design配色を適用する

寒色系のiceパレットに切り替え、色順を逆にする

[モダンな体裁に整える]:theme_modernコマンド

theme_modernは、背景の枠線や目盛線を減らし、余白を広めに取った体裁に変更します。base_sizeで全体の文字サイズを、legend.positionで凡例の位置を指定し、show.ticksにTRUEを渡すと目盛線が加わります。

オプション意味初期値
base_size基準となるフォントサイズ(ポイント単位)11
base_family基準となるフォントファミリー“”
plot.title.sizeタイトルのサイズ(ポイント単位)。”none” も指定できる1.35 * base_size
plot.title.faceタイトルの字体(”plain”、”italic”、”bold”、”bold.italic”)“plain”
plot.title.spaceタイトルの余白1.8 * base_size
plot.title.positionタイトル・サブタイトルとキャプションの揃え位置。”panel” でパネルに、”plot” でプロット全体に揃える“plot”
legend.position凡例の既定の配置(”none”、”left”、”right”、”bottom”、”top”、”inside”)“right”
axis.title.space軸タイトルの余白1.8 * base_size
axis.text.space軸と目盛ラベルの間隔base_size
legend.title.size凡例タイトルの文字サイズ(ポイント単位)1.2 * base_size
legend.text.size凡例の文字サイズ(ポイント単位)。”none” も指定できる1.1 * base_size
axis.title.size軸タイトルの文字サイズ(ポイント単位)1.2 * base_size
axis.title.face軸タイトルの字体(”plain”、”italic”、”bold”、”bold.italic”)“plain”
axis.text.size軸ラベルの文字サイズ(ポイント単位)1.1 * base_size
axis.text.anglex軸ラベルの回転角度NULL
tags.sizeタグの文字サイズ(ポイント単位)1.35 * base_size
tags.faceタグの字体(”plain”、”italic”、”bold”、”bold.italic”)“bold”
show.ticksTRUE で内向きの目盛線を追加し、軸とラベルの間隔をやや広げるFALSE
ggplot2::theme() へ渡す追加のオプションなし
# 産地ごとのテアニン含有量の箱ひげ図をモダンな体裁で描く
ggplot(茶葉, aes(x = 産地, y = テアニン, fill = 産地)) +
  geom_boxplot() +
  scale_fill_okabeito() +
  theme_modern()

# 文字サイズを大きくし、凡例を下に置き、目盛線を表示する
ggplot(茶葉, aes(x = 産地, y = テアニン, fill = 産地)) +
  geom_boxplot() +
  scale_fill_okabeito() +
  theme_modern(base_size = 14, legend.position = "bottom", show.ticks = TRUE)

産地ごとのテアニン含有量の箱ひげ図をモダンな体裁で描く

文字サイズを大きくし、凡例を下に置き、目盛線を表示する

[分布を半分のバイオリンで示す]:geom_violinhalfコマンド

geom_violinhalfは、分布の密度を片側だけのバイオリンで描きます。flipで向きを、scaleで幅のそろえ方を指定します。中央線に沿って並ぶため、箱ひげ図より裾の形が読み取りやすくなります。

オプション意味初期値
mappingaes() で作成した審美的属性の対応付けNULL
dataこのレイヤーに表示するデータ。NULL のとき ggplot() のデータを引き継ぐNULL
statデータに適用する統計変換“ydensity”
positionデータに適用する位置調整“dodge”
trimTRUE でバイオリンの裾をデータの範囲で切り詰めるTRUE
flip半バイオリンの向きを反転するか。数値ベクトルで反転する図形を個別に指定することもできるFALSE
scale“area” で全バイオリンの面積を、”count” で観測数に比例させ、”width” で最大幅をそろえるc(“area”, “count”, “width”)
show.legendこのレイヤーを凡例に含めるかの論理値。NA で審美的属性が対応付けられていれば含めるNA
inherit.aesFALSE で既定の審美的属性を継承せず上書きするTRUE
layer() の params へ渡すその他のオプション。固定色などの静的な審美的属性を指定するなし
# 産地ごとのテアニン含有量の分布を半バイオリンで示す
ggplot(茶葉, aes(x = 産地, y = テアニン, fill = 産地)) +
  geom_violinhalf() +
  scale_fill_okabeito()

# 向きを反転し、面積ではなく最大幅をそろえる
ggplot(茶葉, aes(x = 産地, y = テアニン, fill = 産地)) +
  geom_violinhalf(flip = TRUE, scale = "width") +
  scale_fill_okabeito()

産地ごとのテアニン含有量の分布を半バイオリンで示す

向きを反転し、面積ではなく最大幅をそろえる

[バイオリンと点を重ねて示す]:geom_violindotコマンド

geom_violindotは、片側のバイオリンと、反対側に積み上げた点を組み合わせて描きます。dots_sizeで点の大きさ、binwidthで点を積む間隔、position_dotsで点の位置を調整します。観測数が少ないときに、分布の形と実際の値を同時に示せます。

オプション意味初期値
mappingaes() で作成した審美的属性の対応付けNULL
dataこのレイヤーに表示するデータ。NULL のとき ggplot() のデータを引き継ぐNULL
trimTRUE でバイオリンの裾をデータの範囲で切り詰めるTRUE
scale“area” で全バイオリンの面積を、”count” で観測数に比例させ、”width” で最大幅をそろえるc(“area”, “count”, “width”)
show.legendこのレイヤーを凡例に含めるかの論理値NA
inherit.aesFALSE で既定の審美的属性を継承せず上書きするTRUE
dots_size点のサイズの調整0.7
dots_color点の色の調整NULL
dots_fill点の塗りつぶし色の調整NULL
binwidth点を積み上げる際のビン幅。既定はデータ範囲の30分の10.05
position_dots点の位置調整ggplot2::position_nudge(x = -0.025, y = 0)
layer() の params へ渡すその他のオプションなし
size_dots点のサイズの調整dots_size
color_dots点の色の調整dots_color
fill_dots点の塗りつぶし色の調整dots_fill
# 産地ごとの萎凋歩合について、分布の形と個々の観測を重ねて示す
ggplot(茶葉, aes(x = 産地, y = 萎凋歩合, fill = 産地)) +
  geom_violindot() +
  scale_fill_material()

# 点を大きくし、点を積む間隔を広げる
ggplot(茶葉, aes(x = 産地, y = 萎凋歩合, fill = 産地)) +
  geom_violindot(dots_size = 1.2, binwidth = 0.15) +
  scale_fill_material()

産地ごとの萎凋歩合について、分布の形と個々の観測を重ねて示す

点を大きくし、点を積む間隔を広げる

[レーダーチャートの座標系にする]:coord_radarコマンド

coord_radarは、極座標を用いて軸を放射状に並べ、レーダーチャートを描きます。thetaで角度に対応する変数、startで開始角度、directionで回る向きを指定します。geom_polygonやgeom_lineと組み合わせ、theme_radarで軸の体裁を整えます。

オプション意味初期値
theta角度に対応付ける変数(x または y)“x”
start12時方向を基準とした開始位置のオフセット(ラジアン)0
direction1 で時計回り、-1 で反時計回り1
ggproto へ渡すその他のオプションなし
# 官能評価の点数を品種ごとにレーダーチャートで比較する
ggplot(官能, aes(x = 評価項目, y = 点数, color = 品種, group = 品種)) +
  geom_polygon(fill = NA, linewidth = 1) +
  coord_radar() +
  theme_radar()

# 開始角度を回し、反時計回りにする
ggplot(官能, aes(x = 評価項目, y = 点数, color = 品種, group = 品種)) +
  geom_polygon(fill = NA, linewidth = 1) +
  coord_radar(start = pi / 4, direction = -1) +
  theme_radar()

官能評価の点数を品種ごとにレーダーチャートで比較する

開始角度を回し、反時計回りにする


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

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