Rで解析:ベクトル場の可視化が簡単「ggvfields」パッケージの紹介

矢印や線で表現される方向と強さを持つデータの視覚化は複雑な流れや傾向を理解する上で不可欠です。本パッケージは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)) 
ggvfieldsのgeom_stream_field() のグラフ

実行例

ストリームラインの視覚化

# 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の範囲で一様分布に従う乱数")

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

Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.
タイトルとURLをコピーしました