「directlabels」パッケージ
はggplot2やlatticeで作成したプロットの系列付近へ直接ラベルを配置することができます。折れ線グラフ・散布図・密度プロットなどは凡例が煩雑になりがちですが、系列付近へ直接ラベルを配置するので、視線移動が少ないグラフの作成が可能です。「ggplot2」パッケージでの利用例を紹介します。
パッケージバージョンは2025.5.20。実行コマンドはR version 4.5.0で確認しています。
目的:色分け系列が多い、折れ線グラフ・散布図・密度プロットの各指標にラベルを付与。
インストールと読み込み、準備
下記、コマンドを実行してください。記事コマンドを実行するには「tidyverse」パッケージの読み込みが必要です。
# パッケージのインストール
install.packages("directlabels")
# パッケージの読み込み
library("directlabels")
# tidyverseパッケージの読み込み
# tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
install.packages("tidyverse");require("tidyverse")
}
主な機能と代表的なコマンド
他にコマンドがあるかもしれません。
区分 | 関数/メソッド | 概要 |
---|---|---|
ラベルの追加 | direct.label() | 既存 ggplot2 / lattice オブジェクトに直接ラベルを追加 |
geom_dl() | ggplot2のコマンドに組み込むことが可能です、凡例を自動非表示します。「実行例」を参照ください。 | |
ラベル位置の指定 | "last.points" , "first.qp" , "smart.grid" など | 系列に応じて自動配置します。位置の指定は「ラベル位置を指定するオプション」を参照ください。 |
組み合わせ | dl.combine() | 複数の位置を指定してラベルをプロット。例えば、先頭と末尾などにプロットします。 |
ラベル位置を操作するコマンド
他にコマンドがあるかもしれません。
コマンド | 主な役割 | 位置指定に関わる オプション | 備考 |
---|---|---|---|
direct.label(p, method, debug = FALSE) | ggplot2のプロットに ラベルを付与 | method (後述のメソッドを指定)debug (境界枠表示) | もっとも手軽に試せる入口関数 |
geom_dl(mapping,method, debug = FALSE) | ggplot2 のレイヤーとしてラベルを追加 (ビルド時に凡例を自動非表示) | method , debug | ggplot2 のパイプラインに組み込みやすい |
dl.combine(m1, m2) | 複数メソッドを合成し 1 つのメソッドを返す | ― | dl.combine("first.qp","last.qp") など |
dl.trans(x = x + δx, | 既存メソッドに平行移動を加えるヘルパー | x , y (cm単位で指定) | 細かい微調整に便利 |
・method
オプション共通で使える設定:list形式で位置と共に指定します。例:list(“last.points”, rot = 30)など
rot
– 文字列の回転角度 (°)cex
– フォント倍率hjust
,vjust
– 水平/垂直アンカーalpha
,fontface
,family
– 透過度・太字・フォント族shift.x
,shift.y
– 全ラベルを一括シフト(dl.trans()
と併用)
ラベル位置を指定するオプション
オプション名 | 配置場所 | グラフ例 |
---|---|---|
"first.qp" | 系列先頭 | 折れ線グラフの左端 |
"last.qp" | 系列末尾 | 折れ線グラフの右端 |
"first.points" / "last.points" | 先頭/末尾の実測点に添付 | 点・線グラフ |
"top.points" / "bottom.points" | グループ内の最上/最下の点に配置 | 散布図・折れ線 |
"smart.grid" | 点クラスタの重心付近に配置 | 多群散布図 |
"extreme.grid" | 点群の外接四隅を探索して配置 | 散布図 |
"angled.boxes" | 枠に収めつつ配置 | 折れ線・面グラフ |
"right.polygons" / "left.polygons" | ポリゴンの右端/左端外側に配置 | 面グラフ・等高線図 |
散布図の例
各グループの中央付近にラベルがプロットします。
# 図の作成
p <- ggplot(iris, aes(Petal.Length, Sepal.Length,
colour = Species)) +
geom_point()
# 各グループ中央付近にラベルをプロット:direct.labelコマンド
direct.label(p = "smart.grid")

折れ線グラフの例
各グループの線末端にラベルを重複を回避しプロットします。ラベルの大きさは自動調整です。
# 図の作成
library("nlme")
p2 <- ggplot(BodyWeight,
aes(Time, weight, colour = Rat,
group = Rat)) +
geom_line() +
facet_grid(. ~ Diet)
# 末尾に重複回避で配置:ラベルの大きさは自動で調整
direct.label(p2, method = "last.qp")

実行例
・正弦波と余弦波を描画し、 geom_dl()
を使用して末尾に回転ラベルを配置した例
# 正弦波と余弦波を作成
df <- data.frame(
x = rep(seq(0, 2*pi, length.out = 200), 2),
y = c(sin(seq(0, 2*pi, length.out = 200)),
cos(seq(0, 2*pi, length.out = 200))),
grp = rep(c("sin", "cos"), each = 200)
)
# 「geom_dl」コマンドの使用例
ggplot(df, aes(x, y, colour = grp)) +
geom_line() +
geom_dl(aes(label = grp),
method = list("last.points", rot = 30)) +
theme_minimal()

・「dl.combine」コマンドを使用
系列の先頭と末尾に同時にラベルを付ける例です。「dl.combine」コマンドに “first.qp” と “last.qp” を指定し描写します。
# ── 1. データ例の作成 ───────────
set.seed(123) # 再現性確保
x_vals <- seq(0, 2*pi, length.out = 200)
df <- data.frame(
x = rep(x_vals, 3),
y = c(sin(x_vals), # 系列 A
cos(x_vals), # 系列 B
0.5 * sin(2 * x_vals)), # 系列 C
grp = factor(rep(c("sin", "cos", "0.5·sin(2x)"),
each = length(x_vals)))
)
# ── 2. 先頭+末尾ラベル用メソッドを作成 ───────────
first_last <- dl.combine("first.qp", "last.qp")
# ── 3. プロット ────────────────────────────────
ggplot(df, aes(x, y, colour = grp, group = grp)) +
geom_line(linewidth = 0.7) +
geom_dl(aes(label = grp),
method = first_last) +
theme_minimal() +
labs(title = "dl.combine() で系列の両端にラベル",
x = NULL, y = NULL, colour = NULL)

エラーと対処法
症状 | 原因 | 解決策 |
---|---|---|
Error: no applicable positioning method | method を指定しておらず自動選択に失敗 | method に"last.points" などの位置指定をする |
ラベルが重なる | 系列数が多い/密集 | 「dl.combine 」コマンドで調整 |
ラベルが枠外へはみ出す | 文字サイズ大・余白不足 | methodにlistで「reduce.cex 」を指定する。例:list("last.points",reduce.cex("lr")) 。または clipオプションに"off"を設定 |
おわりに
directlabels
を使えば煩雑な凡例付き図を凡例無しで直感的なラベル付与が可能です。 複数系列の比較を行うあらゆる可視化でぜひお試しください。
少しでも、あなたの解析が楽になりますように!!