3. カラーマップと伝達関数

新しいデータセットを開いてメッシュを見るとき、可視化ツールユーザが最初に行うことの1つは、スカラーデータを使ってメッシュに色を付けることです。カラーマッピングは、データをカラーにマッピングし、レンダリングイメージにカラーを表示する一般的な可視化テクニックです。当然ながら、データ配列を色にマッピングするには伝達関数(transfer function)を使用します。伝達関数を使用して、半透明サーフェスのレンダリングやボリュームレンダリングのために、データ配列を不透明度にマッピングすることもできます。この章では、データ配列をカラーと不透明度にマッピングする基本について説明します。

3.1. 基礎

カラーマッピング(多くの場合不透明度マッピングも含まれています)には、スカラーマッピングや擬似カラーリングなどさまざまな名前が付けられています。基本原則では、サーフェスメッシュまたはボリュームをレンダリングするときに、データ配列をカラーにマッピングします。データ配列は任意の値と型を持つことができるため、特定のデータ値がどのカラーにマップされるかを定義することができます。このマッピングは、カラーマップ( color maps )または伝達関数( transfer functions )と呼ばれるものを使用して定義されます。データ値からレンダリングプリミティブへのこのようなマッピングは、色だけでなく不透明度値についても定義することができるので、より一般的な用語である伝達関数( transfer functions )を使用します。

もちろん、データ配列がレンダリング時に使用する赤緑青の値を実際に指定する場合もあります(つまり、伝達関数をまったく使用しない場合)。これは Map Scalars 表示プロパティを使用して制御することができます。詳しくは 4.3 章 の章を参照してください。この章では、Map Scalars が有効な場合、つまり、配列と色や不透明度を対応付けるために伝達関数が使用されている場合について説明します。

ParaView では、データ配列ごとに色と不透明度の伝達関数を個別に設定できます。ParaView は、伝達関数をその名前で識別されるデータ配列に関連付けます。同じ伝達関数は、異なる3Dビューまたはパイプラインの異なるステージの結果で同じ配列を使用してカラーリングする場合にも使用されます。3.2.1 章 を使用して、配列名と表現によって独立したカラーマップを作成することもできます。

ベクトルやテンソルなど、複数の成分を含む配列の場合、カラー/不透明度マッピングにマグニチュードを使用するか特定の成分を使用するかを指定できます。伝達関数自体と同様に、マルチコンポーネント配列をカラーにマップする方法の選択も配列名に関連付けられます。したがって、同じ名前を持つ配列で色付けされる2つのパイプラインモジュールは、不透明度および色について同じ伝達関数を使用するだけでなく、成分(component)/大きさ(magnitude)の選択機能も使用します。

Common Errors

初心者は、伝達関数が配列名に関連付けられていることを忘れがちであるため、あるビューに表示されているデータセットの伝達関数を変更すると、他のビューにも影響することに驚きます。ParaView では、値の解釈を誤る可能性があるため、同じ変数に対して異なる伝達関数を使用することは推奨されません。この警告にもかかわらず、別の伝達関数を使用する場合は、分離カラーマップ機能を使用できます( 3.2.1 章 を参照)。

色と不透明度には別々の伝達関数があります。不透明度伝達関数はボリュームレンダリングに使用され、サーフェスレンダリングに使用する場合はオプションとして使用されます。

3.1.1. paraview でのカラーマッピング

../_images/ScalarColoringOnPropertiesPanel.png
../_images/ScalarColoringFromToolbar.png

図 3.17 Properties パネル(左)と Active Variables Controls ツールバー(右)で、カラーにする配列を選択するために使用するコントロール

Properties パネルまたは Active Variables Controls ツールバーを使用して、カラーマッピングに使用する配列を選択できます。最初にカラーを設定する配列を選択し、次にマルチコンポーネント配列のコンポーネントまたはマグニチュードを選択します。ParaView は、既存の伝達関数を使用するか、選択した配列に新しい伝達関数を作成します。

3.1.2. pvpython でのカラーマッピング

これは、disk_out_ref.ex2 データセットのデータ配列を使用してカラーリングするサンプルスクリプトです。

from paraview.simple import *

# create a new 'ExodusIIReader'
reader = ExodusIIReader(FileName=['disk_out_ref.ex2'])
reader.PointVariables = ['V']
reader.ElementBlocks = ['Unnamed block ID: 1 Type: HEX8']

# show data in view
display = Show(reader)

# set scalar coloring
ColorBy(display, ('POINTS', 'V'))

# rescale color and/or opacity maps used to include current data range
display.RescaleTransferFunctionToDataRange(True)

simple モジュールで提供されている ColorBy ファンクションは、選択した配列に対して色と不透明度の伝達関数が正しく設定されていることを保証します。この配列は、すでに配列名に関連付けられている既存のものを使用しているか、新しいものを作成しています。2番目の引数として NoneColorBy に渡すと、スカラーカラーが表示されます。

3.2. paraview での伝達関数の編集

../_images/ColorMapEditor.png

図 3.18 パネルの主要なコンポーネントを示している paraview にある Color Map Editor パネル

paraview では、 Color Map Editor を使って色と不透明度の伝達関数をカスタマイズします。 Color Map Editor の表示/非表示は、View > Color Map Editor メニューオプションを使用して切り替えることができます。

図 3.18 に示すように、パネルは Properties パネルと同様のレイアウトに従います。このパネルには、アクティブビューでアクティブデータソース(またはフィルタ)に色を付けるために使用される伝達関数のプロパティが表示されます。アクティブソースがアクティブビューに表示されていない場合、またはスカラーカラーを使用していない場合、パネルは空になります。

プロパティパネルと同様、デフォルトではよく使われるプロパティが表示されます。pqAdvanced ボタンを使って、高度なプロパティの表示/非表示を切り替えることができます。さらに、Search ボックスに名前を入力することで、特定のプロパティを検索することができます。

伝達関数が変更されるたびに再レンダリングが必要で、時間がかかることがあります。デフォルトでは、パネルは変更のたびにレンダリングを要求します。これを避けるために、pqAutoApply ボタンをトグルすることができます。チェックを外すと、 Render Views ボタンを使って手動でパネルを更新する必要があります。

pqReset ボタンは、現在のカラーマップのアプリケーションのデフォルト設定を復元します。

pqSaveArraypqSave ボタンは、現在の色と不透明度の伝達関数を、そのすべてのプロパティとともに、デフォルトの伝達関数として保存します。ParaView は、次に新しいデータ配列に色を付けるために転送関数をセットアップする必要があるとき、それを使用します。pqSaveArray ボタンは、同じ名前の配列のデフォルトとして伝達関数を保存し、pqSave ボタンは、すべての配列のデフォルトとして伝達関数を保存する一方、同じ名前の配列のデフォルトとして伝達関数を保存します。これは、すでに設定されている伝達関数には影響しないことに注意してください。また、これはセッションを越えて保存されるので、ParaView は再起動後もこれを記憶しています。

3.2.1. カラーマップの分離

../_images/ParaView_UsersGuide_SeparateColorMap.png

図 3.19 カラーマップボタンの分離

現在のアクティブなリプレゼンテーションで ParaView に別のカラーマップを使用させるには、図 3.19 に示すボタンをクリックします。個別のカラーマップは、名前によって複数のリプレゼンテーションで共有されるのではなく、配列名とレプレゼンテーションに一意的に関連付けられます。

これはPythonでも簡単にできます。

from paraview.simple import *

Wavelet()
wavelet1Display = Show()
wavelet1Display.SetRepresentationType('Surface')

# set scalar coloring
ColorBy(wavelet1Display, 'RTData')

# set the usage of a Separate Color Map
wavelet1Display.UseSeparateColorMap = True

# or use the ColorBy interface directly
ColorBy(wavelet1Display, 'RTData', separate = True)

# display the same data in another view for comparison with different color map
# get layout
layout1 = GetLayout()

# split cell
layout1.SplitHorizontal(0, 0.5)

renderView1 = GetActiveView()

# Create a new 'Render View'
renderView2 = CreateView('RenderView')

# place view in the layout
layout1.AssignView(2, renderView2)

# set active view
SetActiveView(renderView2)

wavelet2Display = Show()
wavelet2Display.SetRepresentationType('Surface')

# Use the ColorBy interface to create a separated color map
ColorBy(wavelet2Display, 'RTData', separate = True)

# get separate color transfer function/color map for 'RTData'
separate_wavelet2Display_RTDataLUT = GetColorTransferFunction('RTData', wavelet2Display, separate=True)

# Apply a preset using its name.
separate_wavelet2Display_RTDataLUT.ApplyPreset('Cold and Hot', True)

ResetCamera(renderView1)
ResetCamera(renderView2)
RenderAllViews()

3.2.2. マッピングデータ

../_images/ParaView_UsersGuide_ColorMapTransferFunction.png

図 3.20 伝達関数エディタ(Transfer function editor)と関連プロパティ

Mapping Data プロパティグループは、データをカラーまたは不透明度にマッピングする方法を制御します。伝達関数エディタウィジェットを使用して、カラーと不透明度の伝達関数を制御します。パネルには常に両方の伝達関数が表示されます。不透明度伝達関数が使用されるかどうかは、いくつかの要因によって異なります。

  • サーフェスメッシュレンダリングを行う場合、 Enable opacity mapping for surfaces がチェックされている場合にのみ使用されます。

  • ボリュームレンダリング時には、常に不透明度マッピングが使用されます。

リニアスケールではなく、ログスケールを使用してデータをカラーにマップするには、 Use log scale when mapping data to colors をチェックします。データがゼロ以外の正の範囲にあると仮定します。ParaView はエラーを報告し、範囲がログマッピングに無効な場合は自動的に範囲を修正しようとします。

カラーマップの範囲は、データ値のカラーへのマッピングを制御する非常に重要なプロパティです。範囲は、便利なように多くの状況で自動的に更新できます。範囲の更新方法は、 Color Map EditorAutomatic Rescale Range Mode プロパティで制御されます。 Never を選択すると、データ範囲は自動的に更新されません。 Grow and update on 'Apply' を選択すると、ParaView は、 Properties パネルで Apply をクリックするたびに、現在のデータ範囲を含むようにカラー/不透明度マップ範囲を拡大します。したがって、データ範囲が変更された場合、タイムステップが変更されても、カラー/不透明度マップ範囲は影響を受けません。時間ステップの変化の範囲も拡大するには、 Grow and update every timestep オプションを使用します。これで、タイムステップが変更されたときだけでなく、 Apply でも範囲が更新されます。Grow は、カラー/不透明度マップ範囲が現在のデータ範囲を含むように拡大されるだけで、縮小されないことを示します。範囲を現在のデータ範囲と正確に一致させるには、 Clamp and update every timestep オプションを使用します。これで、 Properties パネルで Apply を押すたびに、またはタイムステップを変更するたびに、範囲が正確なデータ範囲に固定されます。 Automatic Rescale Range Mode の初期値は、 Settings ダイアログ( 12.1.1 章 を参照)の General 設定 Transfer Function Reset Mode で制御されます。

3.2.3. 伝達関数エディタ

伝達関数エディタの使い方は、とても簡単です。不透明度エディタ・ウィジェットとカラー・エディタ・ウィジェットのコントロール・ポイントは、互いに独立しています。コントロールポイントを選択するには、コントロールポイントをクリックします。選択されると、コントロールポイントは赤い丸でハイライトされ、コントロールポイントに関連するデータ値がウィジェット下の Data 入力ボックスに表示されます。何もない場所をクリックすると、その場所にコントロールポイントが追加されます。コントロールポイントを移動するには、コントロールポイントをクリックし、ドラッグします。選択したコントロールポイントに関連するデータ値を Data 入力ボックスで微調整することができます。コントロールポイントを削除するには、コントロールポイントを選択してから、Delete キーをタイプします。マウスポインタは伝達関数ウィジェットの中にある必要があります。終点のコントロールポイントを移動したり削除したりすることはできませんが、両端のバーをドラッグすれば、伝達関数の範囲を変更することができます。また、後で説明するように、伝達関数全体を再スケールして制御点を移動させることもできます。

不透明度の伝達関数ウィジェットでは、コントロールポイントを垂直方向に移動して、そのコントロールポイントに関連付けられた不透明度の値を制御することができます。カラー伝達関数ウィジェットでは、コントロールポイントを選択してから Enter または Return キーをタイプして color chooser ダイアログをポップアップし、そのコントロールポイントに関連付けられた色を設定することができます。

不透明度伝達関数ウィジェットでは、コントロールポイント間の補間をある程度コントロールすることもできます。コントロールポイントをダブルクリックすると、補間コントロールウィジェットが表示され、補間に影響を与えるシャープネスとミッドポイントを変更することができます。コントロールハンドルをクリック&ドラッグすると、補間の変化を確認できます。

伝達関数エディタの上部にあるコンボボックスは、"Default" プリセットを素早く切り替えるために使用されます。どのプリセットをデフォルトにするかは、後述の Favorites ボタン pqFavorites でアクセスできる Color Preset マネージャで設定することができます。

../_images/ColorMapComboBox.png

伝達関数ウィジェットの右側にあるいくつかのコントロールボタンは、次のアクションをサポートしています。

  • pqResetRange : Pipelineブラウザで選択されたデータソース、つまりアクティブソースのデータ範囲を使用して、色と不透明度の伝達関数を再スケーリングします。これは伝達関数全体をリスケーリングします。したがって、中間点を含むすべての制御点は、新しい範囲に合うように比例的に調整されます。

  • pqResetRangeCustom : ユーザーが提供する範囲を使用して、色と不透明度の伝達関数を再スケールします。ユーザーがカスタム範囲を入力するためのダイアログがポップアップ表示されます。

  • pqResetRangeTemporal : 色と不透明度の伝達関数をすべてのタイムステップのデータの値の範囲に再スケールします。この操作は、すべてのタイムステップのデータを読み込む必要があるため、コストがかかる場合があります。

  • pqResetToVisibleRange: ビューで可視の要素(セルまたは点)の値の範囲を使用して、色と不透明度の伝達関数を再スケールします。この操作により、色の範囲全体が可視要素に割り当てられ、他の方法では見えないパターンが明らかになる可能性があります。

  • pqInvert : 例えば、赤から緑への伝達関数は、緑から赤への伝達関数に反転されます。これはカラー伝達関数にのみ作用し、不透明度伝達関数はそのまま残ります。

  • pqFavorites : プリセットからカラー伝達関数をロードします。カラープリセットマネージャーのダイアログが表示され、ParaViewに含まれているカラーマップを選択するか、ファイルからプリセットをインポートすることができます。

  • pqSave : 現在のカラー伝達関数をプリセットに保存します。カラー・プリセット・マネージャーのダイアログが表示され、伝達関数に名前をつけたり、伝達関数をファイルに書き出したりすることができます。不透明度の関数も伝達関数と一緒に保存することができます。プリセットは DefaultUser グループの下に追加されます。

  • pqAdvanced : 伝達関数コントロールポイントの詳細表示をトグルします。UIを使用するのではなく、コントロールポイントの値を手動で入力する場合に便利です。

3.2.4. カラーマッピングパラメータ

../_images/ParaView_UsersGuide_ColorMapParameters.png

図 3.21 カラーマッピングパラメータ(詳細プロパティを含む)。 Color Map Editor (非表示)の右上にある歯車のアイコンをクリックすると、詳細プロパティが有効になります。

プロパティの Color Mapping Parameters グループは、RGB、HSV、Lab、Diverging、またはLab/CIEDE 2000のいずれかのカラー補間空間の制御を含む、カラー伝達関数の追加制御を提供します。 特定のカラーを持つカラーマップの範囲を下回るまたは上回るデータ値にカラーを適用するには、それぞれ拡張オプション Use Below Range Color および Use Above Range Color を有効にします。範囲の両側にあるデータに対して異なる色を選択できます。NaNを使用したカラーマッピング浮動小数点配列では、NaN値に使用するカラーと不透明度を選択できます。また、カラー伝達関数でスムーズ補間を使用するか、マップを固定数のカラーに離散化するかを指定することもできます。

3.3. pvpython での伝達関数の編集

pvpython では、伝達関数オブジェクトにアクセスし、それらのプロパティを変更することで、伝達関数を制御します。次のスクリプトは、伝達関数オブジェクトにアクセスする方法を示しています。

from paraview.simple import *

# You can access the color and opacity transfer functions
# for a particular array as follows. These functions will
# create new transfer functions if none exist.
# The argument is the array name used to locate the transfer
# functions.
>>> colorMap = GetColorTransferFunction('Temp')
>>> opacityMap = GetOpacityTransferFunction('Temp')

色と不透明度の伝達関数にアクセスしたら、他のソースやビューなどと同様に、これらのプロパティを変更できます。Pythonのトレース機能を使用してこのAPIを検出することを強くお勧めします。

# Rescale transfer functions to a specific range
>>> colorMap.RescaleTransferFunction(1.0, 19.9495)
>>> opacityMap.RescaleTransferFunction(1.0, 19.9495)

# Invert the color map.
>>> colorMap.InvertTransferFunction()

# Map color map to log-scale preserving relative positions for
# control points
>>> colorMap.MapControlPointsToLogSpace()
>>> colorMap.UseLogScale = 1

# Return back to linear space.
>>> colorMap.MapControlPointsToLinearSpace()
>>> colorMap.UseLogScale = 0

# Change using of opacity mapping for surfaces
>>> colorMap.EnableOpacityMapping = 1

# Explicitly specify color map control points
# The value is a flattened list of tuples
# (data-value, red, green, blue). The color components
# must be in the range [0.0, 1.0]
>>> colorMap.RGBPoints = [1.0, 0.705, 0.015, 0.149,
                          5.0, 0.865, 0.865, 0.865,
                         10.0, 0.627, 0.749, 1.0,
                         19.9495, 0.231373, 0.298039, 0.752941]

# Similarly, for opacity map. The value here is
# a flattened list of (data-value, opacity, mid-point, sharpness)
>>> opacity.Points = [1.0, 0.0, 0.5, 0.0,
                      9.0, 0.404, 0.5, 0.0,
                     19.9495, 1.0, 0.5, 0.0]

# Note, in both these cases the controls points are assumed to be sorted
# based on  the data values. Also, not setting the first and last
# control point to have same data value can have unexpected artifacts
# in the 'Color Map Editor' panel.

多くの場合、現在のデータ範囲に合わせてカラーマップと不透明度マップの尺度を変更する必要があります。これは次のように行います。

>>> source = GetActiveSource()

# Update the pipeline, if it hasn't been updated already.
>>> source.UpdatePipeline()

# First, locate the display properties for the source of interest.
>>> display = GetDisplayProperties()

# Reset the color and opacity maps currently used by 'display' to
# use the range for the array 'display' is using for color mapping.
# This requires that the 'display' has been set to use scalar coloring
# using an array that is available in the data generated. If not, you will
# get errors.
>>> display.RescaleTransferFunctionToDataRange()

3.4. カラー凡例

../_images/ParaView_UsersGuide_ColorMapLegendDetail.png

図 3.22 ParaView のカラー凡例(Color legend)

カラーレジェンドはスカラーバーまたはカラーバーとも呼ばれ、レンダリングビューにおいてどの色がどのデータ値に対応するかという情報をユーザに提供するために設計されています。カラーマップエディタで表示/編集している伝達関数に対応する色の凡例は、パネルの上部にある pqScalarBar ボタンで表示/非表示を切り替えることができます。このボタンはアクティブビューでの凡例の可視性に影響を与えます。

図 3.22 に、カラー凡例のさまざまな構成要素を示します。デフォルトでは、タイトルは通常、マップされる配列(および非スカラーデータ配列のコンポーネント番号またはマグニチュード)の名前です。自動生成されたラベルは、カラー凡例の一方の側に表示され、もう一方の側には注釈が表示されます。オプションで、カラー凡例範囲の最小値と最大値を示す開始注釈と終了注釈を含めることもできます。

カラー凡例はマウスで操作できます。凡例をクリックしてドラッグし、ビューの任意の位置に配置することができます。また、マウスポインタを凡例の上に移動したときに表示される終端マーカーをクリックしてドラッグすることで、凡例の長さを変更することもできます。

3.4.1. カラー凡例パラメータ

../_images/ParaView_UsersGuide_ColorMapLegendParameters.png

図 3.23 paraviewEdit Color Legend Parameters

Color Map Editor パネルにある pqEditScalarBar ボタンをクリックすると、カラーレジェンドのパラメータを編集することができます。これにより、利用可能なパラメータを表示する Edit Color Legend Properties ダイアログがポップアップ表示されます。どのような変更も、アクティブビューの特定の色凡例にのみ影響します。

Edit Color Legend Properties の最初のいくつかのオプションは、レンダリングビューでのカラー凡例の方向と位置を制御します。 Auto Orient は、カラー凡例の方向の自動決定をオンにします。カラー凡例は、レンダリングビューの下部または上部にドラッグすると方向が水平に変わり、左側または右側にドラッグすると垂直に変わります。無効にすると、方向を選択できます。Orientation コンボボックスでオプションを選択して、カラー凡例を表示します。 Window Location オプションは、ウィンドウ内のカラー凡例の位置を制御します。値 AnyLocation が選択されている場合、カラー凡例は特定の位置に強制されません。カラー凡例は、レンダリングビューでマウスでクリックしてドラッグすることによって配置できます。または、 Position プロパティを[0, 1]からの範囲の分数座標で明示的に指定し、カラー凡例の左下コーナーが配置されるウィンドウ幅(または高さ)の分数を表すこともできます。カラー凡例がマウスと対話的に配置されている場合、 Window Location オプションは自動的に AnyLocation に変更されます。

タイトルテキストとタイトル、ラベル、注釈のフォントプロパティの明らかな変更のほかに、カラー凡例の外観を制御するパラメータがいくつかあります。

デフォルトでは、凡例が垂直方向に配置されている場合、凡例に合わせてタイトルは反時計回りに90度回転します。 Horizontal Title チェックボックスをオンにすると、色凡例の方向に関係なく、色凡例のタイトルが水平になります。

Draw Annotations は、注釈(開始注釈と終了注釈を含む)を描画するかどうかを指定します。

Draw Nan Annotation を選択すると、 Color Map Editor パネルに設定されたNaNカラーがカラー凡例のすぐ横に別のカラーボックスで表示されます。そのボックスに表示される注釈テキストは、 Nan Annotation テキストを変更することで修正できます。

../_images/ParaView_UsersGuide_ColorMapNaN.png

図 3.24 NaN注釈を示すカラー凡例

Automatic Label Format がチェックされている場合、ParaView は、値と使用可能な画面領域に基づいて、数値の最適表現を選択しようとします。このチェックボックスをオフにすると、printf 形式の数値を明示的に指定できます。対象の値に明示的にラベルを付けるには、 Use Custom Labels オプションを有効にします。このオプションを選択したときに表示されるテーブルに表示するラベル値を正確に指定できます。 Color Bar Thickness は、凡例の厚さをコントロールするために使用されます。フォントサイズの指定方法と同様に、ポイント単位で定義されます。カラーバーの長さを明示的に設定するには、 Color Bar Length を使用します。このプロパティは、ウィンドウの幅(カラー凡例が水平方向の場合)または高さ(垂直に方向付けられると)の範囲[0, 1]の割合として定義されます。

3.4.2. pvpython でのカラー凡例

ビュー内のソースのスカラーマッピングに使用される伝達関数のカラー凡例またはスカラーバーを表示するには、表示プロパティでAPIを使用します:

>>> source = ...
>>> display = GetDisplayProperties(source, view)

# to show the color legend
>>> display.SetScalarBarVisibility(view, True)

# to hide the same
>>> display.SetScalarBarVisibility(view, False)

3.4.1 章 のようにカラー凡例プロパティを変更するには、まず特定のビューのカラー伝達関数のカラー凡例オブジェクトにアクセスする必要があります。これらは、ビュー内のソースの表示プロパティに似ています。

>>> colorMap = GetColorTransferFunction('Temp')

# get the scalar bar in a view (akin to GetDisplayProperties)
>>> scalarBar = GetScalarBar(colorMap, view)

# Now, you can change properties on the scalar bar object.
>>> scalarBar.TitleFontSize = 8
>>> scalarBar.DrawNanAnnotation = 1

3.5. アノテーション

簡単に言えば、注釈(アノテーション、Annotation)を使用すると、色の凡例の特定のデータ値にカスタムテキストを配置できます。最小および最大データマップ値注釈が自動的に追加されます。その他のカスタム注釈を追加するには、 Color Map Editor を使用します。

アノテーションのリストは高度なプロパティなので、パネルの上部にある pqAdvanced アイコンを使って高度なプロパティを表示するか、検索ボックスで annotations とタイプする必要があります。これは基本的にリストウィジェットで、 図 3.25 にあるように、ユーザーが値と注釈のペアではなく、キーと値のペアを入力することができます。

../_images/ParaView_UsersGuide_ColorMapWidget.png

図 3.25 Color Map Editor パネルで注釈を追加/編集するためのウィジェット

ウィジェットの右側のボタンを使用して、エントリを追加または削除できます。 Value 列に注釈を付けるデータ値を入力し、 Annotation 列にその値で表示するテキストを入力します。

Tab (tab)キーを使用して、次のエントリを編集できます。テーブルの最後のエントリを編集した後に Tab を押すと、自動的に新しい行が追加されるので、ボタンをクリックしなくても簡単に注釈を追加できます。

一部の注釈テキストが凡例に表示されない場合があります。注釈が表示されない場合は、次の2つの理由が考えられます。第1に、付加された値は、カラー伝達関数のマップされた範囲外です。第2に、 Draw AnnotationsColor Legend Parameters dialog でチェックされていません。

pqFilterpqFilterEyeball ボタンは、可能であればデータ配列から一意の離散値で注釈ウィジェットを埋めるために使用することができます。データ配列に存在する個別の値の数に基づいて、これはどんな結果ももたらさないかもしれません(その代わりに警告メッセージが表示されます)。データ配列の値は、pqFilter ボタンを使用した場合は選択したソースオブジェクトから、pqFilterEyeball ボタンを使用した場合は可視のパイプラインオブジェクトから取得されます。

3.5.1. pvpython での注釈

注釈(Annotation)は、カラーマップオブジェクトのプロパティです。目的のカラーマップにアクセスし、Annotations プロパティを変更するだけです。

>>> colorMap = GetColorTransferFunction('Temp')

# Annotations are specified as a flattened list of tuples
# (data-value, annotation-text)
>>> colorMap.Annotations = ['1', 'Slow',
                            '10', 'Fast']

3.6. カテゴリカラー

一枚の絵は一千語に匹敵する(百聞は一見にしかず)と言われているから、絵に任せて話を進めます。カテゴリカラーマップを使用すると、図 3.26 に示すように、可視化結果をレンダリングできます。

../_images/ParaView_UsersGuide_ColorMapCategorical.jpg

図 3.26 離散カラーリングのためのカテゴリカルカラーマップを用いた可視化

スカラーカラーリングを考えるとき、通常はマッピングのことを話します。数値を色に変換します。ただし、数値が実際の数値ではなく、要素タイプや歯車タイプ( 図 3.26 のように)、一般的にはカテゴリなどの列挙である場合もあります。カラーを適用する値の範囲を指定する補間カラーマップを使用する従来の方法は、ここでは実際には機能しません。ユーザーは、離散的なステップの数、複数の制御点、および注釈を使って、いつでもトリックを使用することができますが、退屈で面倒です。

カテゴリカラーマップは、このような場合にエレガントなソリューションを提供します。連続的なカラー伝達関数の代わりに、ユーザは、これらの値に使用する離散値および色のセットを指定します。データ値がルックアップテーブルの値と正確に一致する要素の場合、paraview は指定された色を描画します。それ以外の場合は、NaNカラーが使用されます。

カラー凡例またはスカラーバーも新しいモードに切り替わり、単一のバーではなく注釈付きのスワッチ(見本)がレンダリングされます。ルックアップテーブルの各値にカスタム注釈を追加できます。

3.6.1. カテゴリカラー: ユーザーインターフェース

../_images/ParaView_UsersGuide_ColorMapCatEditor.png

図 3.27 Interpret Values As Categories がチェックされている場合のデフォルトの Color Map Editor

paraview にデータ配列がカラーリングのカテゴリとして扱われるようにするには、 Color Map Editor パネルの Interpret Values As Categories チェックボックスをオンにします。これがチェックされると、パネルはカテゴリモードに切り替わります。 Mapping Data グループは非表示になり、 Annotations グループは非詳細グループになります。つまり、図 3.27 に示すように、パネルに詳細プロパティが表示されていなくても注釈ウィジェットは表示されます。

アノテーションウィジェットには、以前に追加されたアノテーションがそのまま表示されますが、何も追加されていない場合は空になることもあります。データ値に対するアノテーションの追加は、これまでと同様にウィジェット横のボタンで行います。ただし、今回は各注釈の項目に色の欄が設けられています。色が指定されていない場合はクエスチョンマークのアイコンが表示され、指定されている場合は色見本が表示されます。色見本やクエスチョンマークをダブルクリックすることで、そのエントリに使用する色を指定することができます。また、pqFavorites ボタンをクリックすると、カテゴリー別のカラーマップのプリセットコレクションから選択することもできます。

以前と同様に、Tab キーを使用して複数の値を編集および追加できます。そのため、最初にすべての目的の値を1つのパスに追加し、次にプリセットカラーマップを選択して追加した値のカラーを設定できます。プリセットの色が注釈付きの値よりも少ない場合は、追加の注釈の色を手動で設定する必要があります。

Common Erros

カテゴリカラーマップは、列挙型を含むデータ配列用に設計されており、通常は整数配列です。ただし、浮動小数点数の配列にも使用できます。浮動小数点数を使用すると、注釈に指定された値がデータセット内の値と正確に一致しない場合があります(ユーザーが一致すると予想している場合でも)。その場合は、NaNカラーが使用されます。

3.6.2. pvpython でのカテゴリカラー

>>> categoricalColorMap = GetColorTransferFunction('Modes')
>>> categoricalColorMap.InterpretValuesAsCategories = 1

# specify the labels for the categories. This is similar to how
# other annotations are specified.
>>> categoricalColorMap.Annotations = ['0', 'Alpha', '1', 'Beta']

# now, set the colors for each category. These are an ordered list
# of flattened tuples (red, green, blue). The first color gets used for
# the first annotation, second for second, and so on
>>> categoricalColorMap.IndexedColors = [0.0, 0.0, 0.0,
                                         0.89, 0.10, 0.10]