矢印や線で表現される方向と強さを持つデータの視覚化は複雑な流れや傾向を理解する上で不可欠です。本パッケージはggplot2パッケージのコマンドを利用しながら、このようなベクトル場の可視化が可能です。特に、勾配やポテンシャル場の可視化に優れていて、パターン推定の役に立つのではないかと考えます。
パッケージバージョンは1.0.1。Windows 11 x64 (build 26200)のR version 4.6.0で確認しています。
パッケージのインストール
下記コマンドを実行してください。
# パッケージのインストール
install.packages("ggvfields")
# パッケージの読み込み
library("ggvfields")コマンド例
紹介以外には「geom_stream」、「geom_vector」、「geom_vector_smooth」コマンドがあります。オプションは紹介する「geom_gradient_field」コマンドが基本となります。詳細はコメント、パッケージのヘルプを確認してください。
六角形グリッドを作成:grid_hexコマンド
# 六角形グリッドを作成:grid_hexコマンド
# xlimオプション:x軸の範囲を指定するc(-1, 1)のようなベクトル
# ylimオプション:y軸の範囲を指定するc(-1, 1)のようなベクトル
# dオプション:ヘキサゴンの直径を指定する数値。
grid <- grid_hex(xlim = c(-1, 1), ylim = c(-1, 2), d = .25)
# 六角形グリッドデータの最初5行を表示
head(grid, n = 5)
x y
1 -1.00 -0.8660254
2 -0.75 -0.8660254
3 -0.50 -0.8660254
4 -0.25 -0.8660254
5 0.00 -0.8660254
# 六角形グリッドデータをプロット
plot(grid, asp = 1) 
スカラー場をプロット:geom_gradient_fieldコマンド
# スカラー場をプロット:geom_gradient_fieldコマンド
# mappingオプション:色やサイズの設定設定
# dataオプション:データを指定
# statオプション:初期値;StatStreamField
# positionオプション:位置調整の方法。;初期値"identity"
# na.rmオプション:欠損値を除去;初期値FALSE
# show.legendオプション:凡例の表示;初期値TRUE
# inherit.aesオプション:既定レイヤーへの上書き可否;初期値TRUE
# nオプション:値が大きいほど密な勾配場;初期値11
# max_itオプション:勾配流の最大ステップ数を指定する整数;初期値1000
# Tオプション:数値積分で使用する時間間隔を指定する数値;初期値NULL
# Lオプション:勾配ベクトルや流線の目標長さを指定する数値;初期値NULL
# centerオプション:シード点を原点に揃えるかを指定;初期値TRUE
# normalizeオプション:ベクトルの正規化の有無;初期値TRUE
# tail_pointオプション:ベクトルの尻尾に点を描画するかの可否;初期値FALSE
# eval_pointオプション:評価点に点の描画の可否;初期値FALSE
# lineendオプション:線端スタイル,"round", "butt", "square"が選択可能;初期値"butt"
# linejoinオプション:線接合スタイル,"round", "butt", "square"が選択可能;初期値"round"
# linemitreオプション:線の留め継ぎ(ミター)の制御;初期値10
# arrowオプション:矢印の指定;初期値grid::arrow(angle = 30, length = grid::unit(0.02, "npc"), type = "closed")
# funオプション:スカラー場を定義する関数
# 共分散行列を作成
Si <- matrix(c(1, 0.75, 0.75, 1), nrow = 2)
# 関数を定義
f <- function(u) exp(-as.numeric(u %*% solve(Si) %*% u) / 2) / (2 * pi * det(Si))
# スカラー場をプロット:geom_gradient_fieldコマンド
ggplot() +
geom_gradient_field(fun = f, xlim = c(-3, 3), ylim = c(-3, 3),
tail_point = TRUE) 
流場をプロット:geom_stream_fieldコマンド
# 関数を定義
f <- function(u) c(-u[2], u[1])
# スカラー場をプロット:geom_stream_fieldコマンド
ggplot() + geom_stream_field(fun = f, xlim = c(-1,1), ylim = c(-1,1)) 
実行例
ストリームラインの視覚化
# ggplot2パッケージを読み込む
library(ggplot2)
# シードを設定
set.seed(456)
### データ例の作成#####
# xとyは-10から10の範囲で一様分布に従う乱数、uとvはxとyを用いて計算
n <- 100
x <- runif(n, -10, 10)
y <- runif(n, -10, 10)
u <- sin(x) * cos(y)
v <- -cos(x) * sin(y)
df <- data.frame(x = x, y = y, u = u, v = v)
########
# プロット
ggplot(df, aes(x = x, y = y)) +
geom_stream(aes(u = u, v = v), bins = 20, color = "red", size = 1) +
theme_minimal() +
labs(title = "-10から10の範囲で一様分布に従う乱数")
この記事が誰かの役に立ちますように。

