ログイン

ParaViewのTips

Top / ParaView

Japanese / English

気象関係者を想定した ParaView の覚え書き。未完成だがとりあえず公開。

導入

基礎

画面の構成

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」−「Box」を選択。

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

図の属性と表示(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を押しながら 拡大・縮小 回転 マウスに対して拡大・縮小

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

色(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. 「Apply」をクリックすることで実際に切断される。

  5. もし反対側を切断したい場合は、「Properties」パネルの「Properties」−「Inside Out」にチェックを入れて「Apply」をクリックする。

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

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

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

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

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

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

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

保存

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

  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スクリプト

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

「Tools」−「Python Shell」により、コマンドプロンプトを起動できる。

>>>

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

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

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

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

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

Pythonスクリプトの実行

  1. テキストエディタでPythonスクリプト(拡張子py)を作成
    • 球を表示するスクリプト(test.py)の例
      sphere1 = Sphere()
      Show(sphere1)
      Render()
      
  2. コマンドプロンプトを起動。
  3. 「Run Script」をクリック。
  4. 実行したい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スクリプトとしてトレースする

マクロと組み合わせると便利そう。たとえば、カメラを特定の角度にする、等。

  1. 「Tools」−「Start trace」
  2. (マクロとして行いたいオプションを設定)
  3. 「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が存在すると表示できない。以下の手順で前処理を行うとうまく表示できる。

  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
    

その他

地図を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に変更して画像ファイルを読み込む

リンク

参考書