ParaViewのTips
気象関係者を想定した ParaView の覚え書き。未完成だがとりあえず公開。
- 導入
- 基礎
- 簡単な図形の表示
- 図の属性と表示(Properties, Display, View)
- 描画域(Viewport)
- 色(Color)
- フィルタ(Filter)
- 保存
- システム情報
- Pythonスクリプト
- 気象データの可視化
- NICAMデータ(NetCDF)の可視化
- csvデータの可視化
- その他
- リンク
- 参考書
導入
基礎
画面の構成
ParaView全体の表示例と代表的な要素の名称を以下に示す。

各要素を表示するかどうかは、メニューの「View」から調整できる。

各要素の右上をクリックすることで、別ウィンドウとして分離することや非表示にすることができる。

起動直後の状態にリセットする
現在の状態を保存する
後で同じ状態に復元したい場合に便利。
メニューの「File」−「Load State」から保存したファイルを選択することで復元できる。
詳細オプションの表示
簡単な図形の表示
以下では予め用意されている図形の一部を紹介する。ParaViewの操作に慣れる上でも有用である。完全なリストはこちら(英語)から閲覧できる。
立方体
図の属性と表示(Properties, Display, View)
図形中心の位置を指定する
描画域の絶対的な座標に対する位置を指定する。描画域全体の位置を指定する場合は〜を参照。
図形の色を指定する
図形の不透明度を指定する
図形をワイヤーフレームで表示する
XYZ座標の向きを表示する/しない
描画域(Viewport)
描画域を水平/鉛直に分割する
描画域右上の「Split Horizontal」又は「Split Vertical」をクリックすると、水平又は鉛直方向に描画域を分割することができる。

分割後の初期状態では新しくできた描画域には何も表示されないが、描画したい描画域をアクティブにした状態で「Pipeline Browser」の可視化をonにすることで表示できる。このように、「Pipeline Browser」の可視化on/offは描画域毎に設定できる。

タブを用いた描画域の切り替え
描画域の表示をマウスで操作する
マウスを用いて描画域の回転・平行移動・サイズ変更を行うことができる。
- 回転(Rotate):原点のまわりでカメラを回転
- ロール(Roll):カメラの位置を固定したまま回転
- パン(Pan): カメラを平行移動
一つの動作に対して複数の方法が提供されているため、例えば中央ボタン(or スクロールボタン)がない場合でも対応できる。
以下のデフォルトの動作は、「Edits」−「Settings」、「Camera」タブから変更可能である。

3次元の図形を表示している場合
左ボタン | 中央ボタン | 右ボタン | |
---|---|---|---|
回転 | パン | 拡大・縮小 | |
Shiftを押しながら | ロール | 回転 | パン |
Ctrlを押しながら | 拡大・縮小 | 回転 | マウスに対して拡大・縮小 |
2次元の図形を表示している場合
色(Color)
フィルタ(Filter)
図形を切断する(Clip)
- 「Filters」−「Common」−「Clip」を選択。
- 切断面が赤い枠で表示される。
- 赤枠をドラッグすると切断面を並行移動できる。矢印をドラッグすると角度を変更できる。
- 「Apply」をクリックすることで実際に切断される。
- もし反対側を切断したい場合は、「Properties」パネルの「Properties」−「Inside Out」にチェックを入れて「Apply」をクリックする。
- 切断後、枠を表示したくない場合は「Properties」パネルの「Properties」−「Plane Parameters」−「Show Plane」のチェックを外す。
図形の断面を取り出す(Slice)
- 「Filters」−「Common」−「Slice」を選択。
- 切断面が赤い枠で表示される。
- 赤枠をドラッグすると切断面を並行移動できる。矢印をドラッグすると角度を変更できる。「Properties」パネルの「Properties」−「Plane Parameters」にある「X Normal」等をクリックすると、座標軸に直行した面を指定できる。
- 「Apply」をクリックすることで実際に切断される。
Clipフィルタは図形を切断するだけだが、Sliceフィルタは切断「面」を取り出す
保存
表示されている画像を保存する
画像の再現性を確保したい場合
以下、ディスプレイサイズの依存性を回避する方法。
- Tools から Lock View to Custom Size を選択
- 適当なサイズを入力、以後この値を使うようにする。
- ここで入力したサイズは「Save Screenshot」のデフォルト値になる模様
システム情報
Pythonスクリプト
コマンドプロンプトの起動
「Tools」−「Python Shell」により、コマンドプロンプトを起動できる。

>>>
の後ろにコマンドを入力できる。

以下に球を読み込んで表示するコマンドの例を示す。
-
球を読み込み(「Sources」−「Sphere」と同じ)
>>> sphere1 = Sphere()
-
球を可視にする
>>> Show(sphere1)
-
画面上に反映
>>> Render()
上記のようにRender()を行わないと、画面上には反映されない。
-
球を不可視にして画面上に反映
>>> Hide(sphere1) >>> Render()
Pythonスクリプトの実行
-
テキストエディタでPythonスクリプト(拡張子py)を作成
-
球を表示するスクリプト(test.py)の例
sphere1 = Sphere() Show(sphere1) Render()
-
球を表示するスクリプト(test.py)の例
- コマンドプロンプトを起動。
- 「Run Script」をクリック。
- 実行したいPythonスクリプト(上の場合はtest.py)を指定。
ParaView起動時にPythonスクリプトを読み込む
オプション--scriptを用いることで指定可能。
Linuxの場合の例
$ paraview --script=test.py
Windowsの場合の例
C:\Users\Hoge> "C:\Program Files\ParaView 5.1.2\bin\paraview" --script=C:\Users\Hoge\Desktop\paraview\test.py
設定をPythonスクリプトとしてトレースする
マクロと組み合わせると便利そう。たとえば、カメラを特定の角度にする、等。
- 「Tools」−「Start trace」
- (マクロとして行いたいオプションを設定)
- 「Tools」−「Stop trace」
気象データの可視化
鉛直座標を調整する
ParaViewは緯度・経度を直接解釈できないため、lat/lon/levデータを読み込むと鉛直方向が極端に表示されてしまう場合がある。

Transformフィルタを使って鉛直方向に適当なスケールファクター(以下では0.001)を掛けることで解決する。


水平断面を表示する(その1)
Clipフィルタを用いる。「Clip」の「Properties」パネル、「Properties」−「Plane Parameters」から「Z Normal」を選択することで切断面が水平になり、ある高さにおける水平断面を表示できる。「Origin」のZ成分を指定することで、高さを直接することも可能。


水平断面を表示する(その2)
Sliceフィルタを用いる。「Slice」の「Properties」パネル、「Properties」−「Plane Parameters」から「Z Normal」を選択することで切断面が水平になり、ある高さにおける水平断面を表示できる。「Origin」のZ成分を指定することで、高さを直接することも可能。


さらにCoutourフィルタを用いると、断面における等値線を描くことができる。

等値線を描く値は「Contour」の「Properties」パネル、「Properties」−「Isosurfaces」−「Value Range」で設定する。値を決め打ちすることも可能だが、ここでは「Remove all entries」(×アイコン)をクリックした上で、「Add a range of values」をクリックして等間隔の等値線を描いてみよう。

最小値、最大値、コンターの数を指定すしたら「OK」をクリック。

「Apply」すると反映される。

「Pipeline Browser」から「Slice」の可視をonにすると、シェードの上に等値線が表示される。さらに「Contour」の 「Properties」パネル、「Properties」−「Display」−「Styling」−「Line Width」を1から3などへ増やすことで等値線がより見やすくなる。

背景に地図を描画する
図の取り込み
- 地図の画像ファイル(たとえば NOAA Blue Marble)をドラッグ・アンド・ドロップ。
- 「Properties」パネルの「Properties」から「Apply」。
- 「Properties」パネルの「Properties」−「Display」−「Scalar Coloring」の「Map Scalars」チェックボックスをoffにする。これで画像がそのまま表示される。
図のサイズの調整
上のままでは地図と物理場の位置やサイズがずれてしまう。なぜなら、
- 図(jpg):ピクセルがそのまま(x,y)座標として取り込まれる。左下が原点であり、zは常に0。
-
データ:全球の緯度経度座標の場合、x=[0:360)、y=(-90:90)などであり、この場合の原点は図の左端の中央。
従って、データに応じて図を水平移動、拡大縮小する必要がある。
例えば erde.png(DKRZサンプル地図, 5400×2700ピクセル)、NICAM 3Dデータの場合、
-
erde.png の「Properties」−「Display」−「Transforming」
- Translation = (0, -90, 0)
- Scale = (0.06667, 0.0667, 1) ← (360/5400)
-
物理量に対するTransform filterの「Properties」
- Translate = (0,0,-0.80841) ← 最下層を地表面に合わせる必要がある場合、-最下層(80.841)×0.01倍
- Scale = (1, 1, 0.01)
land_shallow_topo_2048.jpg(blue marble, 2048×1024)、NICAM 3Dデータの場合、
-
land_shallow_topo_2048.jpg の「Properties」−「Display」−「Transforming」
- Translation = (0, -90, 0)
- Scale = (0.17578125, 0.17578125, 1) ← (360/2048)
-
物理量に対するTransform filterの「Properties」
- Translate = (0,0,-0.80841) ← 最下層を地表面に合わせる必要がある場合、-最下層(80.841)×0.01倍
- Scale = (1, 1, 0.01)
TODO: 但し、180度ずらす必要がある。
NICAMデータ(NetCDF)の可視化
3次元データの読み込み
特に問題なく、そのまま読み込んで表示することができる。
2次元データの読み込み
そのまま読み込めるが表示できない。以下の手順で前処理を行うとうまく表示できる。
-
lev次元を除去
ncwa -a lev -d lev,0,0 input.nc output.nc
-
cdoでも可能
cdo --reduce_dim select,levidx=1 input.nc output.nc
- 2D変数でlevが存在するとparaviewで表示できなくなる対策
- 一括変換ツールの例:rmlev.sh
-
cdoでも可能
- Paraviewで読み込み、「Properties」パネル、「Properties」−「Dimensions」で (lat,lon) を選択して「Apply」。適切な変数名を選択。
- Spherical Coordinates が on の場合はこれで表示される。
- Spherical Coordinates が off の場合、このままでは表示されないので以下へ。
- 「transform」フィルタを選択し、何も設定せずに「Apply」。適切な変数名を選択すれば表示されるはず。
NetCDFファイルの結合
-
time次元をunlimitedにする(結合の準備)
ncks --mk_rec_dmn time input1.nc output1.nc ncks --mk_rec_dmn time input2.nc output2.nc
-
例:AMIPデータ
ncks --mk_rec_dmn time /ceist/nicam/hpci/amip/N12/197806/gl09/control/run01/output/1979/19790601-19790601/data_nc/02560x01280.zorg.torg/sa_lwu_toa.nc output1.nc ncks --mk_rec_dmn time /ceist/nicam/hpci/amip/N12/197806/gl09/control/run01/output/1979/19790602-19790602/data_nc/02560x01280.zorg.torg/sa_lwu_toa.nc output2.nc
-
例:AMIPデータ
-
結合
ncrcat output1.nc output2.nc output.nc
#--備考:UDUnitsが必要な場合がある。mapleでは不可、akitaでは可能。
csvデータの可視化
テキストデータをもとに図を描く場合に重宝する。
データの用意
- 一行目: 変数名(コンマ区切り)
- 二行目以降:データ(コンマ区切り)
-
以下、例
X,Y,Z,V 0, 0, 10, 10 100, 0, 10, 20 200, 0, 10, 30 250, 45, 10, 30
その他
地図を180度ずらす
$ montage blue_marble/land_shallow_topo_2048.tif -geometry 100% -gravity west -crop 50%x100% -quality 100 blue_marble_converted/land_shallow_topo_2048_1.png $ montage blue_marble/land_shallow_topo_2048.tif -geometry 100% -gravity east -crop 50%x100% -quality 100 blue_marble_converted/land_shallow_topo_2048_2.png $ montage -tile 2x1 blue_marble_converted/land_shallow_topo_2048_2.png blue_marble_converted/land_shallow_topo_2048_1.png -geometry 100% -quality 100 blue_marble_converted/land_shallow_topo_2048.png
バグ?:透過色利用時の凡例の色
透過色を利用すると、凡例の色が安定しないことがある。ファイルとして出力した図では特に問題ない。
要検証
データ表示がうまくいかない場合、何も指定せずにtransformフィルタを掛けるとうまくいくことがある。
latlonの平面図を球面に貼り付ける
- 参考:https://www.dkrz.de/up/services/analysis/visualization/sw/paraview/tutorial/earth-texture
- 図を用意
- Imagemagickで図を変換
以下だけだと上手くいかない
-
「Sources」-「Sphere」
- Theta/Phi Resolutionを8から50くらいにしておく
-
「Filters」-「TextureMaptoSphere」、一度Apply。
- 「Miscellaneous」の「Texture」をLoadに変更して画像ファイルを読み込む
リンク
- ParaView(英語)
- ParaView Documentation (英語)
- Python による ParaView の操作
-
ParaView and Python
- Pythonを用いたParaViewのコントロール方法が詳しい。
-
ParaView Tutorial (by DKRZ, 英語)
- 地球科学向けのParaView入門
- NOAA Blue Marble: 背景の地図データとして利用可能