Rプログラミング:プロットの余白テキストでグラフをさらに分かりやすく

2025-04-26

mtext()関数の基本的な使い方

mtext(text, side, line = 0, at = NA, adj = NA, padj = NA, cex = 1, col = "black", font = 1, ...)
  • font: テキストのフォントスタイルを指定します。
  • col: テキストの色を指定します。
  • cex: テキストの文字サイズを指定します。
  • padj: テキストの垂直方向の配置を調整します。0は下寄せ、1は上寄せ、0.5は中央寄せです。
  • adj: テキストの水平方向の配置を調整します。0は左寄せ、1は右寄せ、0.5は中央寄せです。
  • at: テキストの配置位置を軸座標で指定します。例えば、side = 1の場合、x軸座標で位置を指定します。NAを指定すると、テキストは中央に配置されます。
  • line: 余白の辺からのテキストの距離をライン数で指定します。デフォルトは0です。正の値を指定すると外側に、負の値を指定すると内側に移動します。
  • side: テキストを表示する余白の辺を指定します。
    • 1: 下 (bottom)
    • 2: 左 (left)
    • 3: 上 (top)
    • 4: 右 (right)
  • text: 書き込むテキスト文字列。


# サンプルプロットを作成
plot(1:10, main = "サンプルプロット")

# 上の余白にテキストを追加
mtext("上の余白テキスト", side = 3, line = 1, col = "red")

# 下の余白にテキストを追加
mtext("下の余白テキスト", side = 1, line = 2, col = "blue", adj = 1)

# 左の余白にテキストを追加(縦書き)
mtext("左の余白テキスト", side = 2, line = 3, col = "green", las = 0)

# 右の余白にテキストを追加
mtext("右の余白テキスト", side = 4, line = 4, col = "purple", at = 5)
  1. sideパラメータ
    • sideパラメータは、テキストを配置する余白の辺を指定します。1から4までの整数で、それぞれ下、左、上、右の辺に対応します。
  2. lineパラメータ
    • lineパラメータは、余白の辺からテキストまでの距離をライン数で指定します。正の値を指定するとテキストは外側に移動し、負の値を指定すると内側に移動します。
  3. atパラメータ
    • atパラメータは、テキストの配置位置を軸座標で指定します。例えば、side = 1の場合、x軸座標で位置を指定します。NAを指定すると、テキストは中央に配置されます。
  4. adjとpadjパラメータ
    • adjパラメータはテキストの水平方向の配置を調整し、padjパラメータは垂直方向の配置を調整します。これらのパラメータを使用すると、テキストの配置をより細かく制御できます。
  5. cex, col, fontパラメータ
    • これらのパラメータは、テキストの文字サイズ、色、フォントスタイルを指定します。これらのパラメータを使用すると、テキストの見た目をカスタマイズできます。


よくあるエラーとトラブルシューティング

    • 原因
      lineパラメータの値が小さすぎるか、負の値を使用している可能性があります。
    • 解決策
      lineパラメータの値を大きくして、テキストを余白の外側に移動させます。必要に応じて、atパラメータを使用してテキストの位置を調整します。

    • mtext("テキスト", side = 1, line = 0)mtext("テキスト", side = 1, line = 2) に変更します。
  1. テキストが余白の外側に表示されない

    • 原因
      sideパラメータの値が間違っているか、lineパラメータの値が大きすぎる可能性があります。
    • 解決策
      sideパラメータの値を確認し、正しい辺を指定します。lineパラメータの値を小さくして、テキストを余白の内側に移動させます。

    • mtext("テキスト", side = 5, line = 1) のように存在しないsideの値を指定していないかを確認します。
  2. テキストの位置が意図した場所にならない

    • 原因
      atadjpadjパラメータの値が適切でない可能性があります。
    • 解決策
      これらのパラメータの値を調整して、テキストの位置を細かく制御します。
      • at: 軸座標での位置を指定します。
      • adj: 水平方向の配置を調整します(0: 左寄せ、1: 右寄せ、0.5: 中央寄せ)。
      • padj: 垂直方向の配置を調整します(0: 下寄せ、1: 上寄せ、0.5: 中央寄せ)。

    • mtext("テキスト", side = 1, at = 2, adj = 0.5) のように各パラメータを調整します。
  3. テキストの文字サイズや色、フォントが意図した通りにならない

    • 原因
      cexcolfontパラメータの値が間違っている可能性があります。
    • 解決策
      これらのパラメータの値を正しい値に設定します。
      • cex: 文字サイズを指定します。
      • col: 文字色を指定します。
      • font: フォントスタイルを指定します(1: 通常、2: 太字、3: 斜体、4: 太字斜体)。

    • mtext("テキスト", side = 1, cex = 1.5, col = "red", font = 2) のように各パラメータを調整します。
  4. 余白が狭すぎてテキストが収まらない

    • 原因
      プロットの余白が狭すぎる可能性があります。
    • 解決策
      par(mar = c(bottom, left, top, right))関数を使用して、余白のサイズを調整します。
      • bottom, left, top, rightは、それぞれ下、左、上、右の余白のサイズをライン数で指定します。

    • par(mar = c(5, 4, 4, 2) + 0.1) のように余白を調整します。
  5. 縦書きで表示されない

    • 原因
      las パラメータを使用していない可能性があります。
    • 解決策
      las = 0mtext() 関数に追加します。

    • mtext("テキスト", side = 2, las = 0)
  6. グラフデバイスのサイズが影響する

    • 原因
      グラフデバイス(ウィンドウまたはファイル)のサイズが小さすぎると、テキストがうまく表示されないことがあります。
    • 解決策
      グラフデバイスのサイズを大きくするか、テキストのサイズを小さくします。

トラブルシューティングの一般的なヒント

  • Rのヘルプドキュメント (?mtext) を参照して、各パラメータの詳細を確認します。
  • par()関数を使用して、プロットのパラメータを確認し、調整します。
  • 簡単な例から始め、徐々に複雑なテキストを追加していきます。
  • エラーメッセージをよく読み、原因を特定します。


基本的な例

# 基本的なプロットを作成
plot(1:10, main = "サンプルプロット")

# 上の余白にテキストを追加
mtext("上の余白テキスト", side = 3)

# 下の余白にテキストを追加
mtext("下の余白テキスト", side = 1)

# 左の余白にテキストを追加
mtext("左の余白テキスト", side = 2)

# 右の余白にテキストを追加
mtext("右の余白テキスト", side = 4)

位置とスタイルの調整

# プロットを作成
plot(1:10, main = "位置とスタイルの調整")

# 上の余白にテキストを追加(位置と色を指定)
mtext("上: 赤色、位置調整", side = 3, line = 2, col = "red", at = 5)

# 下の余白にテキストを追加(文字サイズと配置を指定)
mtext("下: サイズ1.5、右寄せ", side = 1, line = 1, cex = 1.5, adj = 1)

# 左の余白にテキストを追加(フォントと縦書き)
mtext("左: 太字、縦書き", side = 2, line = 3, font = 2, las = 0)

# 右の余白にテキストを追加(垂直方向の配置調整)
mtext("右: 垂直中央寄せ", side = 4, line = 4, padj = 0.5)

余白の調整

# 余白を調整したプロットを作成
par(mar = c(5, 6, 4, 6) + 0.1)  # 余白を広げる
plot(1:10, main = "余白調整", xlab = "", ylab = "")

# 調整後の余白にテキストを追加
mtext("左の余白テキスト (広)", side = 2, line = 4, col = "blue")
mtext("右の余白テキスト (広)", side = 4, line = 4, col = "green")

数式と特殊文字

# 数式と特殊文字を含むテキストを余白に追加
plot(1:10, main = "数式と特殊文字")

mtext(expression(paste("平均: ", bar(x), ", 標準偏差: ", sigma)), side = 3, line = 2)
mtext(expression(alpha >= beta), side = 1, line = 1)

複数のテキストの追加

# 複数のテキストを余白に追加
plot(1:10, main = "複数のテキスト")

mtext("テキスト1", side = 3, line = 1, at = 2)
mtext("テキスト2", side = 3, line = 2, at = 5)
mtext("テキスト3", side = 3, line = 3, at = 8)
# 条件に応じてテキストを追加
plot(1:10, main = "条件付きテキスト")

x <- 7
if (x > 5) {
  mtext("xは5より大きい", side = 1, line = 2, col = "purple")
} else {
  mtext("xは5以下", side = 1, line = 2, col = "orange")
}


text()関数とpar("usr")を使った方法

text()関数は、任意の場所にテキストを配置できます。par("usr")関数は、プロットのユーザー座標系を取得し、余白の座標を計算するのに役立ちます。

# プロットを作成
plot(1:10, main = "text()を使った余白テキスト")

# ユーザー座標系を取得
usr <- par("usr")

# 上の余白にテキストを追加
text(usr[1], usr[4] + 1, "上の余白テキスト", adj = c(0, 0))

# 下の余白にテキストを追加
text(usr[1], usr[3] - 1, "下の余白テキスト", adj = c(0, 1))

# 左の余白にテキストを追加
text(usr[1] - 1, usr[4], "左の余白テキスト", adj = c(1, 1), srt = 90)

# 右の余白にテキストを追加
text(usr[2] + 1, usr[4], "右の余白テキスト", adj = c(0, 1), srt = 270)
  • srtパラメータは、テキストの回転角度を指定します。
  • text()関数のadjパラメータは、テキストの配置を調整します。
  • par("usr")は、プロットのユーザー座標系をベクトル c(x1, x2, y1, y2) として返します。

gridパッケージを使った方法

gridパッケージは、より高度なグラフィックス制御を提供します。viewportgrid.text()関数を使用して、余白にテキストを配置できます。

library(grid)

# プロットを作成
plot(1:10, main = "gridを使った余白テキスト")

# ビューポートを作成して余白にテキストを追加
pushViewport(viewport(x = 0.5, y = 1, height = 0.1, just = "top"))
grid.text("上の余白テキスト", y = 0.5)
popViewport()

pushViewport(viewport(x = 0.5, y = 0, height = 0.1, just = "bottom"))
grid.text("下の余白テキスト", y = 0.5)
popViewport()

pushViewport(viewport(x = 0, y = 0.5, width = 0.1, just = "left"))
grid.text("左の余白テキスト", x = 0.5, rot = 90)
popViewport()

pushViewport(viewport(x = 1, y = 0.5, width = 0.1, just = "right"))
grid.text("右の余白テキスト", x = 0.5, rot = 270)
popViewport()
  • pushViewport()popViewport()は、ビューポートのスタックを管理します。
  • grid.text()関数は、viewport内にテキストを配置します。
  • viewport()関数は、グラフィックス領域の一部を定義します。

ggplot2パッケージとannotation_custom()を使った方法

ggplot2パッケージを使用している場合は、annotation_custom()関数を使用して、gridグラフィックスオブジェクトをプロットに追加できます。

library(ggplot2)
library(grid)

# ggplot2プロットを作成
p <- ggplot(data.frame(x = 1:10, y = 1:10), aes(x, y)) + geom_point() + ggtitle("ggplot2を使った余白テキスト")

# gridテキストオブジェクトを作成
g <- textGrob("上の余白テキスト")

# annotation_custom()で追加
p + annotation_custom(g, xmin = 5, xmax = 5, ymin = 11, ymax = 11)
  • annotation_custom()関数は、gridグラフィックスオブジェクトをggplot2プロットに追加します。
  • textGrob()関数は、gridテキストオブジェクトを作成します。

plotmathを使用した数式表示

plotmathを使用すると、数式を余白に表示できます。

plot(1:10, main = "数式表示")
mtext(expression(paste(alpha, " + ", beta, " = ", gamma)), side = 3, line = 2)