Rの関数から arctext {plotrix} を確認します。
関数 arctext とは
arctext は、文字列を円弧(アーク)に沿って配置するための描画関数です。
標準的な text 関数は文字列を直線的に描画しますが、arctext は、文字列を一文字ずつ分割し、指定された中心点からの半径および角度に基づいて各文字の座標と回転角度(srt)を個別に計算します。
内部処理では、各文字の幅(strwidth)を考慮して円周上の配置角度を算出しており、文字が重なり合わないように設計されています。
また、Rの描画デバイスにおけるアスペクト比(縦横比)の歪みを補正する計算式が含まれているため、出力先が正方形でない場合でも文字列が楕円状に歪むことなく、真円に沿った配置が維持されます。
関数 arctext の活用シーン
- 円形図表へのラベル付与:
- パイチャート、レーダーチャート、あるいは極座標を用いたグラフにおいて、円周の外側や内側に沿って項目名を表示したい場合。
- ロゴや意匠的デザインの作成:
- グラフ内にシンボルマークを描画する際、装飾的に文字列を湾曲させて配置したい場合。
- 地図や地理データの注釈:
- 湾曲した境界線や等高線に沿うように地名や数値を記述し、視覚的な親和性を高めたい場合。
関数 arctext の引数
library(plotrix)
args(arctext)function (x, center = c(0, 0), radius = 1, start = NULL, middle = pi/2,
end = NULL, stretch = 1, clockwise = TRUE, cex = NULL, ...)
NULL- x
- 描画対象となる文字列を指定します。
- center
- 円弧の中心となるX座標およびY座標をベクトル形式
c(x, y)で指定します。
- 円弧の中心となるX座標およびY座標をベクトル形式
- radius
- 中心点から文字までの距離(半径)を指定します。
- start
- 文字列の描画を開始する角度(ラジアン)を指定します。
- middle
- 文字列の中心が位置する角度(ラジアン)を指定します。初期値は \(\pi/2\) (真上)です。
- end
- 文字列の描画を終了する角度(ラジアン)を指定します。
- stretch
- 文字間の間隔を調整する倍率を指定します。1より大きい値は間隔を広げます。
- clockwise
- 文字列を時計回りに配置するかどうかを論理値で指定します。
- cex
- 文字の拡大率を指定します。
- …
-
col(色)やfont(フォントスタイル)など、標準的なtext関数に渡されるパラメータを指定可能です。
-
サンプルコード
# 描画エリアの初期化(軸を表示しない空のグラフを作成)
plot(0, 0,
type = "n", xlim = c(-1.5, 1.5), ylim = c(-1.5, 1.5),
main = "円弧沿い文字列描画のデモンストレーション",
xlab = "", ylab = "", asp = 1
)
# 1. 基本的な円弧配置(上部に時計回りで配置)
# 半径1.2の位置に、中央(pi/2)を基準として描画します
arctext("Arc Text Along the Circle",
center = c(0, 0), radius = 1.2,
middle = pi / 2, cex = 1.5, col = "blue"
)
# 2. 逆方向および下部への配置(反時計回り)
# clockwise = FALSE を指定し、下部(3*pi/2)を基準とします
arctext("Counter Clockwise Configuration",
center = c(0, 0), radius = 1.0,
middle = 3 * pi / 2, clockwise = FALSE,
cex = 1.2, col = "red", font = 2
)
# 3. 文字間隔(stretch)の調整例
# 当該のパラメータにより、文字を意図的に引き伸ばして配置可能です
arctext("Stretched Text",
center = c(0, 0), radius = 0.7,
middle = pi, stretch = 1.5, cex = 1.2, col = "darkgreen"
)
# 4. 日本語も円弧に沿って表示できます
arctext("日本語も表示できます",
center = c(0, 0), radius = 0.4,
middle = pi / 2, stretch = 1.4, cex = 0.8, col = "darkorange"
)
# 5. ガイド用の円を描画
# 視覚的な確認のため、文字列が沿っている軌跡を描画します
draw.circle(0, 0, radius = c(0.4, 0.7, 1.0, 1.2), border = "lightgray", lty = 3)以上です。

