ParaViewのTips
気象関係者を想定した ParaView の覚え書き。未完成だがとりあえず公開。
- 導入
- 基礎
- 簡単な図形の表示
- ファイルの読み込み
- 図の属性と表示(Properties, Display, View)
- 描画域(Viewport)
- 色(Color)
- フィルタ(Filter)
- 保存
- システム情報
- Pythonスクリプト
- 気象データの可視化
- NICAMデータ(NetCDF)の可視化
- csvデータの可視化
- リモートサーバの利用
- その他
- リンク
- 参考書
導入
インストール(共通)
https://www.paraview.org/ の「Download」から Windows、Linux、MacOS それぞれのバイナリをダウンロードすることが可能。Version から必要なバージョンを選択し「ParaView」もしくは「Release Candidates」以下の適切なリンクからダウンロードする。MPI が含まれるインストーラは MPI(並列)版である。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/download.png)
ParaView はバージョンによってサポートされている python のバージョンや記述方法が異なることがあるため、注意が必要である。以下では特に断りのない限り、ParaView 5.4.1 を基準とした説明を行うが、ドキュメント作成の時期によって若干の差異があるかもしれない。
また、サーバ・クライアントモード(後述)で実行する場合、サーバ・クライアント間で同じバージョンの ParaView をインストールする必要がある(MPI版かどうかを合わせる必要はない)。
インストール(Windows)
特にこだわりがない場合、バージョン番号が最も新しい拡張子 msi のインストーラをダウンロードし実行するだけでよい。
インストール(Linux)
tar.gz ファイルをダウンロードするだけでよい。
$ tar -xvzf ParaView-5.4.1-Qt5-OpenGL2-MPI-Linux-64bit.tar.gz
以下、実行例。
$ cd ParaView-5.4.1-Qt5-OpenGL2-MPI-Linux-64bit/bin $ ./paraview
基礎
画面の構成
ParaView全体の表示例と代表的な要素の名称を以下に示す。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/overall.png)
各要素を表示するかどうかは、メニューの「View」から調整できる。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/menu%255fview.png)
各要素の右上をクリックすることで、別ウィンドウとして分離することや非表示にすることができる。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/element%255fdrag%255fdelete.png)
起動直後の状態にリセットする
現在の状態を保存する
後で同じ状態に復元したい場合に便利。
メニューの「File」−「Load State」から保存したファイルを選択することで復元できる。
詳細オプションの表示
簡単な図形の表示
以下では予め用意されている図形の一部を紹介する。ParaViewの操作に慣れる上でも有用である。完全なリストはこちら(英語)から閲覧できる。
立方体
テキスト
- メニューの「Sources」−「Alphabetical」−「Text」を選択。
-
「Properties」パネルの「Text」に文字列を入力、「Apply」をクリック。
- latexの数式を挿入することも可能。
ファイルの読み込み
図の属性と表示(Properties, Display, View)
図形中心の位置を指定する
描画域の絶対的な座標に対する位置を指定する。描画域全体の位置を指定する場合は〜を参照。
図形の色を指定する
図形の不透明度を指定する
図形をワイヤーフレームで表示する
XYZ座標の向きを表示する/しない
描画域(Viewport)
描画域を水平/鉛直に分割する
描画域右上の「Split Horizontal」又は「Split Vertical」をクリックすると、水平又は鉛直方向に描画域を分割することができる。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/split.png)
分割後の初期状態では新しくできた描画域には何も表示されないが、描画したい描画域をアクティブにした状態で「Pipeline Browser」の可視化をonにすることで表示できる。このように、「Pipeline Browser」の可視化on/offは描画域毎に設定できる。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/split%255fviewport.png)
タブを用いた描画域の切り替え
描画域の表示をマウスで操作する
マウスを用いて描画域の回転・平行移動・サイズ変更を行うことができる。
- 回転(Rotate):原点のまわりでカメラを回転
- ロール(Roll):カメラの位置を固定したまま回転
- パン(Pan): カメラを平行移動
一つの動作に対して複数の方法が提供されているため、例えば中央ボタン(or スクロールボタン)がない場合でも対応できる。
以下のデフォルトの動作は、「Edits」−「Settings」、「Camera」タブから変更可能である。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/edit%255fsettings%255fcamera.png)
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フィルタは切断「面」を取り出す
指定した直線上の値をグラフ化する
- PlotOverLine
ベクトルを表示する
- Glyph
流線を表示する
- Stream Tracer
保存
表示されている画像を保存する
画像の再現性を確保したい場合
以下、ディスプレイサイズの依存性を回避する方法。
- Tools から Lock View to Custom Size を選択
- 適当なサイズを入力、以後この値を使うようにする。
- ここで入力したサイズは「Save Screenshot」のデフォルト値になる模様
システム情報
Pythonスクリプト
古い ParaView では Python 2 系、新しい ParaView では Python 3 系のみ対応していることがあるので注意。
コマンドプロンプトの起動
「Tools」−「Python Shell」により、コマンドプロンプトを起動できる。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/menu%255ftools%255fpython%255fshell.png)
>>>
の後ろにコマンドを入力できる。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/python%255fshell.png)
以下に球を読み込んで表示するコマンドの例を示す。
-
球を読み込み(「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データを読み込むと鉛直方向が極端に表示されてしまう場合がある。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/transform%255f1.png)
Transformフィルタを使って鉛直方向に適当なスケールファクター(以下では0.001)を掛けることで解決する。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/transform%255f2.png)
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/transform%255f3.png)
水平断面を表示する(その1)
Clipフィルタを用いる。「Clip」の「Properties」パネル、「Properties」−「Plane Parameters」から「Z Normal」を選択することで切断面が水平になり、ある高さにおける水平断面を表示できる。「Origin」のZ成分を指定することで、高さを直接することも可能。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/clip%255fz%255fnormal%255f1.png)
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/clip%255fz%255fnormal%255f2.png)
水平断面を表示する(その2)
Sliceフィルタを用いる。「Slice」の「Properties」パネル、「Properties」−「Plane Parameters」から「Z Normal」を選択することで切断面が水平になり、ある高さにおける水平断面を表示できる。「Origin」のZ成分を指定することで、高さを直接することも可能。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/slice%255fz%255fnormal%255f1.png)
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/slice%255fz%255fnormal%255f2.png)
さらにCoutourフィルタを用いると、断面における等値線を描くことができる。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/slice%255fz%255fnormal%255fcontour%255f1.png)
等値線を描く値は「Contour」の「Properties」パネル、「Properties」−「Isosurfaces」−「Value Range」で設定する。値を決め打ちすることも可能だが、ここでは「Remove all entries」(×アイコン)をクリックした上で、「Add a range of values」をクリックして等間隔の等値線を描いてみよう。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/slice%255fz%255fnormal%255fcontour%255f2.png)
最小値、最大値、コンターの数を指定すしたら「OK」をクリック。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/slice%255fz%255fnormal%255fcontour%255f3.png)
「Apply」すると反映される。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/slice%255fz%255fnormal%255fcontour%255f4.png)
「Pipeline Browser」から「Slice」の可視をonにすると、シェードの上に等値線が表示される。さらに「Contour」の 「Properties」パネル、「Properties」−「Display」−「Styling」−「Line Width」を1から3などへ増やすことで等値線がより見やすくなる。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/slice%255fz%255fnormal%255fcontour%255f5.png)
背景に地図を描画する
図の取り込み
- 地図の画像ファイル(たとえば 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が存在すると表示できない。以下の手順で前処理を行うとうまく表示できる。
-
lev次元を除去
-
ncoを使う場合
ncwa -a lev -d lev,0,0 input.nc output.nc
-
cdoを使う場合
cdo --reduce_dim select,levidx=1 input.nc output.nc
- 一括変換ツールの例:rmlev.sh
-
ncoを使う場合
-
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
リモートサーバの利用
リモートサーバで ParaView を実行し、手元のPC(クライアント)から操作することができる。
基礎
リモートサーバにおいて pvserver を実行すると、クライアントからの接続を待機する状態になる。
$ pvserver Waiting for client... Connection URL: cs://myserver:11111 Accepting connection(s): myserver:11111
次にクライアント側で ParaView を実行し、「File」−「Connect」を選択する。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/connect.png)
「Add Server」からリモートサーバを追加する。Host および Port 番号は pvserver を実行した際の表示を参考にすること。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/connect%255fconfig%255fserver.png)
リモートサーバに接続し、成功すればローカルの場合とほぼ同様に ParaView を利用することができる。但し、ファイルの Open などではサーバ側のファイルを操作することになる。
上記は firewall の設定が適切になされていることが前提となる。もしポートに制約がある場合、pvserver のオプション --server-port を利用してポート番号を指定する、もしくは後述する ssh トンネリングが有効な場合がある。
並列実行
pvserver を mpiexec を利用して実行することができる。以下、8配列の例。
$ mpiexec -np 8 pvserver
リモートサーバにおいて並列実行できているかどうかは、クライアント側の ParaView で Memory Inspector から確認可能である。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/Memory%255finspector1.png)
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/Memory%255finspector2.png)
sshトンネルを介した接続
firewall の制約などにより、ssh 以外の接続ができないリモートサーバを利用する場合に有用。リモートサーバにおける pvserver の実行は変更なし。クライアントからリモートサーバへ、予め ssh トンネル(ポート転送)を作成する。
-
クライアントが Linux の場合、
$ ssh -L 11111:localhost:11111 myserver
-
クライアントが Windows、TeraTerm の場合
「設定」−「SSH転送」−「追加」から「ローカルのポート」の向きで設定する。リモート側のホストにはリモートサーバのアドレスを指定する。この設定を行った後、リモートサーバへ ssh 接続する。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/ssh%255fport%255fforwarding.png)
次に、ssh トンネルを維持した状態で、クライアント側の ParaView でリモートサーバを追加する。Host は localhost を指定する。この設定でリモートサーバへ接続できるはずである。
![](http://kodama.fubuki.info/wiki/./attach/ParaView.wiki/connect%255fconfig%255fserver%255fssh.png)
その他
地図を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に変更して画像ファイルを読み込む
線の太さを変更する
- Ribbonフィルタを利用すればよい
リンク
- ParaView(英語)
- ParaView Documentation (英語)
- Python による ParaView の操作
-
ParaView and Python
- Pythonを用いたParaViewのコントロール方法が詳しい。
-
ParaView Tutorial (by DKRZ, 英語)
- 地球科学向けのParaView入門
- NOAA Blue Marble: 背景の地図データとして利用可能