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

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

2.1. 基礎

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

もちろん、データ配列で実際にレンダリング時に使用する赤、緑、青のカラー値が指定されている場合もあります(すなわち、伝達関数を全く使用していません)。これは、 Map Scalars displayプロパティを使用して制御できます。詳細については、 sec:RenderView:DisplayProperties を参照してください。この章では、 Map Scalars が有効になっている場合、つまり、伝達関数を使用して配列をカラーや不透明度にマップする場合について説明します。

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

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

Common Errors

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

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

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

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

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

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

2.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 に渡すと、スカラーカラーが表示されます。

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

../_images/ColorMapEditor.png

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

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

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

プロパティパネルと同様に、よく使用されるプロパティがデフォルトで表示されます。 pqAdvanced26 ボタンを使用すると、詳細プロパティの表示/非表示を切り替えることができます。また、Search ボックスに名前を入力して特定のプロパティを検索することもできます。

伝達関数が変更されるたびに再レンダリングが必要になり、時間がかかる場合があります。デフォルト値では、パネルは変更するたびにレンダリングを要求します。これを回避するには、 AutoApplyIcon ボタンを切り替えます。オフにした場合は、 Render Views ボタンを使用してパネルを手動で更新する必要があります。

SP_BrowserReload ボタンをクリックすると、現在のカラーマップのアプリケーションのデフォルト設定が復元されます。

pqSaveArray16 ボタンと pqSave32 ボタンを使用すると、現在のカラーと不透明度の伝達関数とそのすべてのプロパティがデフォルトの伝達関数として保存されます。ParaView は、新しいデータ配列に色を付けるために伝達関数を設定する必要がある場合に、この関数を使用します。pqSaveArray16 ボタンをクリックすると、同じ名前の配列のデフォルトとして伝達関数が保存され、pqSave32 ボタンをクリックすると、すべての配列のデフォルトとして伝達関数が保存されます。すでに設定されている伝達関数には影響しません。また、これはセッション間で保存されるため、ParaView は再起動後もこれを記憶します。

2.2.1. カラーマップの分離

../_images/ParaView_UsersGuide_SeparateColorMap.png

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

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

これは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()

2.2.2. マッピングデータ

../_images/ParaView_UsersGuide_ColorMapTransferFunction.png

図 2.15 伝達関数エディタ(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 ダイアログ( 11.1.1 章 を参照)の General 設定 Transfer Function Reset Mode で制御されます。

2.2.3. 伝達関数エディタ

伝達関数エディタ(Transfer function editor)を使用するのは非常に簡単です。不透明度エディタウィジェットとカラーエディタウィジェットのコントロールポイントは互いに独立しています。制御点を選択するには、その制御点をクリックします。選択すると、コントロールポイントが赤い円で強調表示され、コントロールポイントに関連付けられたデータ値がウィジェットの下の Data 入力ボックスに表示されます。空の領域をクリックすると、その位置に制御点が追加されます。制御点を移動するには、制御点をクリックしてドラッグします。選択したコントロールポイントに関連付けられたデータ値は、 Data 入力ボックスを使用して微調整できます。コントロールポイントを削除するには、コントロールポイントを選択し、Delete キーを入力します。マウスポインタは、Qtがイベントをエディタウィジェットに正しく送信するために伝達関数ウィジェット内にある必要があります。端点制御点は移動または削除できませんが、後述するように、伝達関数全体のスケールを変更して制御点を移動できます。

不透明度伝達関数ウィジェットでは、コントロールポイントを垂直方向に移動して、そのコントロールポイントに関連付けられた不透明度値をコントロールできます。カラー伝達関数ウィジェットでは、コントロールポイントをダブルクリックしてカラー選択ウィジェットをポップアップし、そのコントロールポイントに関連付けられたカラーを設定できます。

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

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

../_images/ColorMapComboBox.png

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

  • pqResetRange24 : パイプラインブラウザで選択したデータソース(アクティブソース)のデータ範囲を使用して、カラーおよび不透明度の伝達関数のスケールを変更します。これにより、伝達関数全体のスケールが変更されます。したがって、中間のコントロールポイントを含むすべてのコントロールポイントは、新しい範囲に合わせて均等に調整されます。

  • pqResetRangeCustom24 : ユーザーが指定した範囲を使用して、カラーおよび不透明度の伝達関数のスケールを変更します。ユーザーがカスタム範囲を入力するためのダイアログがポップアップ表示されます。

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

  • pqResetToVisibleRange32 : ビューに表示される要素(セルまたは点)の値の範囲を使用して、カラーと不透明度の伝達関数のスケールを変更します。この操作では、表示されている要素に色の全範囲が割り当てられ、それ以外では表示されないパターンが表示される場合があります。

  • pqInvert24 : コントロールポイントを移動することで、カラー変換機能を反転します。たとえば、。赤から緑への伝達関数は緑から赤への伝達関数に変換されます。これは、カラー伝達関数にのみ影響し、不透明度伝達関数は変更されません。

  • pqFavorites32 :プリセットからカラー伝達関数をロードします。Color Preset マネージャーダイアログボックスが表示され、ParaViewに含まれるカラーマップの1つを選択したり、プリセットをファイルから読み込むことができます。

  • pqSave32 : 現在のカラー伝達関数をプリセットに保存します。 Color Preset ダイアログボックスが表示され、伝達関数に名前を付けてファイルにエクスポートできます。不透明度関数は、伝達関数を使用して保存することもできます。

  • pqAdvanced26 : 伝達関数の詳細表示を切り替えます。これは、UIを使用するのではなく、制御点の値を手動で入力する場合に便利です。

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

../_images/ParaView_UsersGuide_ColorMapParameters.png

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

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

2.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()

2.4. カラー凡例

../_images/ParaView_UsersGuide_ColorMapLegendDetail.png

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

カラー凡例(Color legend)は、スカラーバーまたはカラーバーとも呼ばれ、レンダリングされたビューのデータ値に対応するカラーに関する情報をユーザに提供するように設計されています。 Color Map Editor で表示/編集されている伝達関数に対応するカラー凡例の表示/非表示を切り替えるには、パネル上部にある ParaView_UsersGuide_ColorLegendButton ボタンを使用します。このボタンは、アクティブビューの凡例の表示/非表示に影響します。

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

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

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

../_images/ParaView_UsersGuide_ColorMapLegendParameters.png

図 2.18 paraviewEdit Color Legend Parameters

カラー凡例パラメータを編集するには、 Color Map Editor パネルの pqEditScalarBar16 ボタンをクリックします。これにより、使用可能なパラメータを示す 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

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

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

2.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)

2.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

2.5. アノテーション

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

注釈のリストは高度なプロパティなので、パネル上部の pqAdvanced26 アイコンを使用して高度なプロパティの表示/非表示を切り替えるか、検索ボックスに annotations と入力する必要があります。 Annotations ウィジェットが表示されます。これは基本的には、図 2.20 に示すように、ユーザーが値と注釈のペアではなく、キーと値のペアを入力できるリストウィジェットです。

../_images/ParaView_UsersGuide_ColorMapWidget.png

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

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

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

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

pqFilter32 および pqFilterEyeball16 ボタンを使用して、注釈ウィジェットにデータ配列から固有の離散値を入力することができます。データ配列に存在する個別の値の数に基づいて、結果が得られない場合があります(代わりに、警告メッセージが表示されます。)。データ配列の値は、 pqFilter32 ボタンを使用した場合は選択したソースオブジェクト、 pqFilterEyeball16 ボタンを使用した場合は表示されているパイプラインオブジェクトから取得されます。

2.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']

2.6. カテゴリカラー

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

../_images/ParaView_UsersGuide_ColorMapCategorical.jpg

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

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

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

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

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

../_images/ParaView_UsersGuide_ColorMapCatEditor.png

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

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

注釈ウィジェットには、以前に追加された可能性のある注釈が表示されます。何も追加されていない場合は空になります。ウィジェットの横にあるボタンを使用する前と同様に、データ値に注釈を追加できます。ただし、今回は各注釈エントリにも色の列があります。色が指定されていない場合は、疑問符アイコンが表示されます。それ以外の場合は、カラー見本が表示されます。色見本または疑問符アイコンをダブルクリックして、そのエントリに使用する色を指定できます。または、 pqFavorites32 ボタンをクリックして、カテゴリカラーマップのプリセットコレクションから選択することもできます。

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

Common Erros

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

2.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]