ログイン

ParaViewのTips

Top / ParaView

Japanese / English

気象関係者を想定した ParaView の覚え書き。未完成だが、有用かもしれないのでとりあえず公開。

インストール

はじめに

https://www.paraview.org/ の「Download」から Windows、Linux、MacOS それぞれのバイナリをダウンロードすることが可能。Version から必要なバージョンを選択し「ParaView」直下の適切なリンクからダウンロードする。ファイル名に MPI が含まれるインストーラは並列版である。

ParaView はバージョンによってサポートされている python のバージョンや記述方法が異なることがある。以下ではできるだけ ParaView 5.13.0 を基準とした説明を行うが、ドキュメント作成の時期によって動作確認したバージョンが混在している。

なお、サーバ・クライアントモードで実行する場合、サーバ・クライアント間で同じバージョンの ParaView をインストールする必要がある。但し、MPI 版かどうかを合わせる必要はない。

Windows向け

特にこだわりがない場合、バージョン番号が最も新しい拡張子 msi のインストーラをダウンロードし実行するだけでよい。

Linux向け

tar.gz ファイルをダウンロード、解凍するだけでよい。

$ tar -xvzf ParaView-5.13.0-MPI-Linux-Python3.10-x86_64.tar.gz

以下、実行例。

$ cd ParaView-5.13.0-MPI-Linux-Python3.10-x86_64.tar.gz/bin
$ ./paraview

但し私の経験上、それなりの確率で起動に失敗する(X環境周りのことが多そうだが解決方法不明)。幸いなことに、サーバとして動かす場合は特に問題にならない。

基礎

画面の構成

ParaView全体の表示例と代表的な要素の名称を以下に示す。

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

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

起動直後の状態にリセットする

メニューの「Edit」−「Reset Session」をクリックすることで、現在の状態をリセットして起動時の初期状態に戻すことができる。

現在の状態を保存する

後で同じ状態に復元したい場合に便利。

  1. メニューの「File」−「Save State」を選択。

  2. ファイル名を入力して「OK」をクリックすることで保存。

メニューの「File」−「Load State」から保存したファイルを選択することで復元できる。

詳細オプションの表示

「Properties」パネルや「Color Map Editor」パネルなどにおいて、デフォルトでは詳細オプションは非表示となっている。これを表示するには、歯車アイコン「Toggle Advanced Properties」をクリックすると表示・非表示を切り替えることができる。

以下に「Properties」パネルにおける属性表示の切り替えの例を示す。

簡単な図形の表示

以下では予め用意されている図形の一部を紹介する。ParaViewの操作に慣れる上でも有用である。

立方体

  1. メニューの「Sources」−「Alphabetical」−「Box」を選択。

  2. 「Properties」パネルの「Apply」をクリック。描画域をマウスでドラッグすると視点を調整できる。

テキスト

  1. メニューの「Sources」−「Alphabetical」−「Text」を選択。
  2. 「Properties」パネルの「Text」に文字列を入力、「Apply」をクリック。
    • latexの数式を挿入することも可能。

ファイルの読み込み

図の属性と表示(Properties, Display, View)

図形中心の位置を指定する

描画域の絶対的な座標に対する位置を指定する。描画域全体の位置を指定する場合は〜を参照。

  1. 「Properties」パネル、「Properties」の「Center」で(x,y,z)の値を調整。

  2. 調整後、Applyをクリックすることで反映される。
    • (x,y,z) = (0,0,0), (1,0,0), (0,0,-1) の例

図形の色を指定する

  1. 「Properties」パネル、「Display」−「Coloring」の「Edit」をクリック。

  2. 色を指定する。

  3. 「OK」をクリックすると即座に反映される。
    • デフォルトの色を変更した例

図形の不透明度を指定する

  1. 「Properties」パネル、「Display」−「Styling」の「Opacity」を調整。

  2. 調整後、Applyをクリックすることで反映される。
    • 半透明(0.5)および不透明(1.0)の例

図形をワイヤーフレームで表示する

  1. 「Properties」パネル、「Display」の「Representation」で「Wireframe」を選択すると即座に反映される。

XYZ座標の向きを表示する/しない

  1. 「Properties」パネル、「View」−「Orientation Axes」の「Orientation Axes Visibility」を設定。

    • on/offの描画例

描画域(Viewport)

描画域を水平/鉛直に分割する

描画域右上の「Split Horizontal」又は「Split Vertical」をクリックすると、水平又は鉛直方向に描画域を分割することができる。

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

タブを用いた描画域の切り替え

描画域左上でタブを用いて描画域を切り替えることができる。「+」をクリックすると新しいタブが作成される。

描画域の表示をマウスで操作する

マウスを用いて描画域の回転・平行移動・サイズ変更を行うことができる。

  • 回転(Rotate):原点のまわりでカメラを回転
  • ロール(Roll):カメラの位置を固定したまま回転
  • パン(Pan): カメラを平行移動

一つの動作に対して複数の方法が提供されているため、例えば中央ボタン(or スクロールボタン)がない場合でも対応できる。

以下のデフォルトの動作は、「Edits」−「Settings」、「Camera」タブから変更可能である。

3次元の図形を表示している場合

左ボタン 中央ボタン 右ボタン
回転 パン 拡大・縮小
Shiftを押しながら ロール 回転 パン
Ctrlを押しながら 拡大・縮小 回転 マウスに対して拡大・縮小

色(Color)

色の範囲を任意に設定する

  1. 「Color Map Editor」の「Mapping Data」−「Rescale to custom range」をクリック。

  2. 値の範囲を設定する。

  3. 「Rescale」をクリック。以後、色の自動設定を無効にしたい場合は「Rescale and disable automatic rescaling」をクリックする。

色の配列を設定する

  1. 「Color Map Editor」の「Mapping Data」−「Choose Preset」をクリック。

  2. 配列を選択する。

  3. 「Apply」をクリックすると反映される。

透過色を設定する

  1. 「Color Map Editor」の「Mapping Data」−「Enable opacity mapping for surfaces」をチェック。
  2. 直下に現れる「Opacity transfer function values」を設定。

凡例を表示・非表示にする

「Color Map Editor」パネルの「Show/hide color legend」をクリックすることで切り替え可能。

凡例を設定する

  1. 「Color Map Editor」パネルの「Edit color legend properties」をクリック。

凡例の特定の値へ注釈(annotation)をつける

  1. 「Color Map Editor」パネル、「Annotations」(詳細オプション)の「Add new entry」をクリック。

  2. 値とラベルを入力する。

フィルタ(Filter)

図形を切断する(Clip)

図形を切断し、断面を表示する。

  1. 「Filters」−「Common」−「Clip」を選択、もしくはツールバーから を選択。

  2. 切断面が白枠と赤円(古いバージョンでは赤枠のみ)で表示される。

  3. 白枠(古いバージョンでは赤枠)をドラッグすると切断面を並行移動できる。

  4. 矢印をドラッグすると切断面の角度を変更できる。

  5. 「Apply」をクリックすることで実際に切断される。

  6. もし反対側を切断したい場合は、「Properties」パネルの「Properties」−「Invert」のチェックを外し(古いバージョンでは「Inside Out」にチェックを入れ)て「Apply」をクリックする。

  7. 切断後、枠を表示したくない場合は「Properties」パネルの「Properties」−「Plane Parameters」−「Show Plane」のチェックを外す。

切断面を厳密に決めたい場合は、「Properties」パネルの「Properties」−「Plane Parameters」において「Origin」(断面が通過する点のXYZ座標値)および「Normal」(断面の法線ベクトルのXYZ成分値)を指定すればよい。また、「X Normal」(YZ断面図)などのよく使う断面はボタンで用意してある。

  • 原点を通るX Normalの例

  • 原点を通るY Normalの例

図形の断面を取り出す(Slice)

  1. 「Filters」−「Common」−「Slice」を選択。

  2. 切断面が赤い枠で表示される。

  3. 赤枠をドラッグすると切断面を並行移動できる。矢印をドラッグすると角度を変更できる。「Properties」パネルの「Properties」−「Plane Parameters」にある「X Normal」等をクリックすると、座標軸に直行した面を指定できる。

  4. 「Apply」をクリックすることで実際に切断される。

Clipフィルタは図形を切断するだけだが、Sliceフィルタは切断「面」を取り出す

指定した直線上の値をグラフ化する

  • PlotOverLine

ベクトルを表示する

  • Glyph

流線を表示する

  • Stream Tracer

描画する値の範囲を指定する

  • Threshold
  • missing valueが分かっている場合はこれで除去できる

カメラ

  • Camera Parameters
    • Position: カメラの位置
    • Focal Point: カメラの焦点(ピント)位置

保存

表示されている画像を保存する

  1. メニューから「File」−「Save Screenshot」をクリック。

  2. 画像の解像度、画質を指定。

    • 縦横比を維持したい場合は「Lock aspect」を選択すると自動調整される。

  3. 「OK」をクリック。
  4. 画像ファイルの種類(png, jpg, bmpなど)を選択し、ファイル名を入力して保存。

画像の再現性を確保したい場合

以下、ディスプレイサイズの依存性を回避する方法。

  1. Tools から Lock View to Custom Size を選択
  2. 適当なサイズを入力、以後この値を使うようにする。
  3. ここで入力したサイズは「Save Screenshot」のデフォルト値になる模様

システム情報

ParaViewのメモリ消費量を確認する

「Memory Inspector」パネルで確認できる。

図形データのメモリ消費量を確認する

「Information」パネルの「Statistics」−「Memory」で確認できる。

Pythonスクリプト

ParaView のバージョンに応じて記述方法が大きく異なる場合がある。ここでは ParaView 5.13.0 (Python 3系)で動作確認した記述方法を紹介する。詳細は ParaView's Python documentation! などを参照のこと。なお、日本語を含むスクリプトの場合はUTFで保存するのが無難。

コマンドプロンプトの起動

「View」−「Python Shell」のチェックボックスを on にすると、コマンドプロンプトが起動できる

参考までに、古い ParaView では「Tools」−「Python Shell」からコマンドプロンプトを起動する。

簡単な例

以下に球を読み込んで表示するコマンドの例を示す。

  1. 球を読み込み(「Sources」−「Sphere」と同じ)
    >>> sphere1 = Sphere()
    
  2. 球を可視にする
    >>> Show(sphere1)
    
  3. 画面上に反映
    >>> Render()
    

上記のようにRender()を行わないと、画面上には正しく反映されない。

  1. 球を不可視にして画面上に反映
    >>> Hide(sphere1)
    >>> Render()
    

Pythonスクリプトの実行

球を表示するスクリプト(test.py)の例を示す。

sphere1 = Sphere()
Show(sphere1)
Render()

コマンドプロンプトにおいて「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

設定のトレース

GUIで実行した処理をスクリプトに落とし込むことができる。

  1. 「Tools」−「Start trace」
  2. (行いたいオプションを設定)
  3. 「Tools」−「Stop trace」

モジュールのロードとリロード

例えば /home/hoge/paraview/src に置いてある draw.py をモジュールとして読み込む場合、

sys.path.append( '/home/hoge/paraview/src' )
import draw

とする。draw.py 中の関数 func は

draw.func()

などで実行可能。

モジュールをロードした後、書き換えた場合、明示的にリロードしないと反映されないので注意(Python Shellの「Reset」ではリロードされない)。

from importlib import reload
reload(draw)

気象データの可視化

鉛直座標の調整

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などへ増やすことで等値線がより見やすくなる。

背景に地図を描画する

地図の画像ファイルを用意して取り込むことになる。DKRZのページに詳細な情報が記載してある。

図の取り込み

  • 地図の画像ファイル(たとえば NOAA Blue Marble)を「File」−「Open」、もしくはドラッグ・アンド・ドロップで開く。
  • 「Properties」パネルの「Properties」から「Apply」。
  • 「Properties」パネルの「Properties」−「Display」−「Scalar Coloring」の「Map Scalars」チェックボックスをoffにする(チェックボックスがない場合は歯車アイコンをクリック)。これで画像が加工されずそのまま表示される。

図のサイズの調整

上のままでは地図と物理場の位置やサイズがずれてしまう。なぜなら、

  • 図(jpg):ピクセルがそのまま(x,y)座標として取り込まれる。左下が原点であり、zは常に0。
  • データ:全球の緯度経度座標の場合、x=[0:360)、y=(-90:90)などであり、この場合の原点は図の左端の中央。

    従って、データに応じて図を水平移動、拡大縮小する必要がある。

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)

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)

以上の方法は簡便であるが、Transformingの内容は次のPipelineに反映されないようである。従って、例えばClipなど図をさらに加工したい場合、元の図に対してClipされるため、不具合が生じる。これを回避するためには、Transformフィルタを用いる。指定方法は基本的に上と同じだが、「Transform All Input Vectors」をoffにする必要があるので注意。

なお、NOAA Blue Marble で経度の範囲を 0度−360度に変更したい場合、以下の例(ImageMagick利用)のような方法で地図を180度ずらすことが可能。

$ montage blue_marble/land_shallow_topo_2048.tif -geometry 100% -gravity west -crop 50%x100% -quality 100 blue_marble_converted/tmp2.png
$ montage blue_marble/land_shallow_topo_2048.tif -geometry 100% -gravity east -crop 50%x100% -quality 100 blue_marble_converted/tmp3.png
$ montage -tile 2x1 blue_marble_converted/tmp3.png blue_marble_converted/tmp2.png -geometry 100% -quality 100 blue_marble_converted/land_shallow_topo_2048.png

NICAMデータ(NetCDF)の読み込み

3次元データの読み込み

特に問題なく、そのまま読み込んで表示することができる。

2次元データの読み込み

levが存在すると表示できない、もしくは ParaView が落ちる。以下の手順で前処理を行うとうまく表示できる。

  1. 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
  2. Paraviewで読み込み、「Properties」パネル、「Properties」−「Dimensions」で (lat,lon) を選択して「Apply」。適切な変数名を選択。
    • Spherical Coordinates が on の場合はこれで表示される。
    • Spherical Coordinates が off の場合、このままでは表示されない
      • 「transform」フィルタを選択し、何も設定せずに「Apply」。適切な変数名を選択すれば表示されるはず。

NetCDFファイルの結合

  1. 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
      
  2. 結合
    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」を選択する。

「Add Server」からリモートサーバを追加する。Host および Port 番号は pvserver を実行した際の表示を参考にすること。名前(ここでは「My Server」)は好きなものでよい。

自分でつけた名前(ここでは「My Server」)をダブルクリックすると、リモートサーバに接続できる。

接続に成功すれば以後、通常とほぼ同様に ParaView を利用することができる。なお、ファイルの Open などではサーバ側のファイルを操作することになるが、python スクリプトはクライアント側のファイルを読み込むことも可能である。

まれに、X サーバ周りで警告が出ることがある。その場合、pvserver の起動時に --disable-xdisplay-test オプションを付与するとうまくいくことがある。

上記の方法は firewall による制約が特にないことが前提となる。もしポートに制約がある場合、pvserver のオプション --server-port を利用してポート番号を指定する、もしくは後述する ssh トンネリングが有効な場合がある。

並列実行

pvservermpiexec を利用して実行することができる。以下、8配列の例。

$ mpiexec -np 8 pvserver

リモートサーバにおいて並列実行できているかどうかは、クライアント側の ParaView で Memory Inspector から確認可能である。

経験的に、粗い解像度のデータを大並列で処理すると、タイル状の格子模様が現れるなど画像が乱れることがある。

sshトンネルを介した接続

firewall の制約などにより、ssh 以外の接続ができないリモートサーバを利用する場合に有用である。リモートサーバにおける pvserver を通常通り実行した上で、クライアントからリモートサーバへ予め ssh トンネル(ポート転送)を作成する。

  • クライアントが Linux の場合、
    $ ssh -L 11111:localhost:11111 myserver
    
  • クライアントが Windows、TeraTerm の場合

    「設定」−「SSH転送」−「追加」から「ローカルのポート」の向きで設定する。リモート側のホストにはリモートサーバのアドレスを指定する。この設定を行った後、リモートサーバへ ssh 接続する。

次に、ssh トンネルを維持した状態で、クライアント側の ParaView でリモートサーバを追加する。Host は localhost を指定する。この設定でリモートサーバへ接続できるはずである。

その他

バグ?:透過色利用時の凡例の色

透過色を利用すると、凡例の色が安定しないことがある。ファイルとして出力した図では特に問題ない。

要検証

データ表示がうまくいかない場合、何も指定せずに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フィルタを利用すればよい

リンク

参考書