「ホバーラベル実行コンテキスト変数」は、グラフレットややテキストレットのスクリプトが実行される環境を定義します。
あなたがグラフレットを定義する際、まずは、どのようなグラフをサムネールとして表示するかを定義します。一方、データのどの行を表示するかは、どのように指定できるのでしょうか。
それは、ユーザが元のグラフ(グラフレットを定義した先のグラフ)の要素のどこにポインタを置くかによって、データのどの行が使われるかが間接的に指定されます。たとえば、元のグラフが棒グラフだとしましょう。いずれかの1つの棒にマウスポインタを置くと、その棒に対応するすべてのデータ行が使われます。1つの棒に対応したデータから作成されたグラフが、サムネールとしてホバーラベルに描かれます。つまり、マウスポインタを置いたグラフ要素が、グラフレットのグラフに使われるデータの「コンテキスト」となります。
このようなコンテキストは、次の点を考慮してWhere節によって表現されます。
• 元のグラフで使用されているグラフの種類
• 元のグラフで役割が割り当てられている列
• グラフ要素における現在の値
生成されたWhere節によってローカルデータフィルタが作成され、それがグラフレットの定義で指定されているプラットフォームに適用されます。
ローカルデータフィルタを適用する列として、次の役割が割り振られた列が使用されます。
• X(入れ子になった列を含む)
• Y(要約統計量などの計算対象でないもの)
• 重ね合わせ
数値列は、元のグラフの種類によって、その数値列の特定の1つの値で絞り込むか、ある範囲に含まれるかどうかで絞り込むかが決まります。ヒストグラムやヒートマップ(さらには箱ひげ図の箱)のように、数値データを範囲で分けるグラフは、範囲によって絞り込まれます。
元のグラフにローカルデータフィルタがある場合は、そのWhere節も使われます。
グラフレットのさまざまな設定、および、他のホバーラベル拡張機能(テキストレットのSetup、グリッドレットのAppendおよびClickスクリプトなど)において、それらを定義するJSL式は、ローカルの名前空間で実行されます。このローカルな名前空間が初期化される際に、実行コンテキストの情報(ホバーラベルのグリッドエントリ、元のグラフ要素への参照、分析の元となるデータ)を示すローカル変数が定義されます。これらのローカル変数は、グラフレットを設定する「プリセット」において使われています。
図12.4に、グラフレットのローカル名前空間にて用意されている変数を示します。ホバーラベルの実行コンテキスト変数全体を見る例を参照してください。
メモ: ローカル変数の使用例を見るには、まず、グラフを右クリックし、[ホバーラベルエディタ]を選択し、[グラフレット]パネルを選択して、[プリセット]タブにあるいずれかのアイコン初期設定を選択します。そして、[イメージ]タブに表示されるコードを見ると、グラフレットの動作を制御するのに使用されるホバーラベル実行コンテキスト変数がどれくらいあるかがわかります。
変数 |
説明 |
---|---|
_mode |
現在の評価コンテキストを示す文字列。値には、Picture(イメージ)、Click(クリック)、Textlet(テキストレット)、Graphlet(グラフレット)、Other(その他)があります。_modeを使ってグラフビルダーの式をカスタマイズし、表示する情報を増やしたり減らしたりできます。 JMPログから: {"_mode", "Textlet"}, Barプリセットの例: If( local:_mode == "Picture", local:sizeDef = "Size( 200, 250 ),"; local:l = 0; , local:sizeDef = ""; local:l = 1; ); メモ: Other(その他)は、式を取るその他の属性(たとえばSkipFiltersFlag)を指します。 |
_groupings |
現在のグループ変数(Xまたは重ね合わせといった役割)の参照リスト。散布図行列と楕円のコンテキストを定義する例を参照してください。 {"_groupings", {:性別}} |
_measurements |
現在の測定値(Yの役割)の列の参照リスト。 {"_measurements", {:"身長(インチ)"n}} |
_filters |
現在のローカルデータフィルタの列の参照リスト。 {"_filters", {:性別}} |
_where |
ホバーしたグラフ要素に関連付けられているWhere節のテキスト表現。Parseされた式は、Get Rows WhereのようなWhere節を取るJSLステートメントで使用されます。_whereは、コンテキストに基づく複雑な計算をキャッシュする際に有効です。 expr = Parse( local:_where ); r = local:_dataTable << Get Rows Where( expr ); ss = dt << Subset( Private, Invisible, Rows( r ) ); Summarize( ss, exg = By( :性別 ), exm = Mean(:"身長(インチ)"n ) ); 次に、別の例を示します。 {"_where", ":性別 == \!"F\!""} |
_whereExpr |
ホバーしたグラフ要素に関連付けられたWhere節をJSL式にしたもの。 local:_h = Round(Mean( :"身長(インチ)"n[local:_dataTable << Get Rows Where( local:_whereExpr )] ), 2); 次に、別の例を示します。 {"_whereExpr", :性別== "F"} |
_displaySegName |
セグメントのクラス名。説明用のテキストを作成するときや、グラフに依存するドリルダウンのロジックの定義などで役立ちます。 Title( local:_displaySegName || "のグラフレット、深さは " || Char( local:_drillDepth )) 次に、別の例を示します。 {"_displaySegName", "BarSeg"} |
_dataTable |
データテーブルへの参照。サブセットの作成に役立ちます。例については、テキストレットを使ってホバーラベルにリッチテキストを追加するを参照してください。 {"_dataTable", Data Table( "Big Class" )} |
_summaryStatistic |
現在の要約統計量の文字列。ドリルダウンで新しいグラフに渡す際に役立ちます。 {"_summaryStatistic", "Mean"} |
_drillDepth |
ドリルダウンにおいてこれまでに開かれたレベルの数。ドリルダウンのチェーンを制限する際、またはSkipFiltersロジックを制御する際に使います。散布図行列と楕円のコンテキストを定義する例を参照してください。 {"_drillDepth", 1} |
_firstRow |
ホバーしたグラフ要素に関連付けられている最初の行の、1から始まる通し番号。詳細については、列を追加・削除する例を参照してください。 {"_firstRow", 1} |
_underlyingRows |
ホバーラベルに表示されるグラフ要素に関連付けられた行の数。この変数を使うと、表示する行数に従ってグラフの種類を決めることができます。行数が少なければ、大きく分類したヒートマップから詳細を見られる点グラフまで(あるいはその逆)ドリルダウンできます。例については、Reapply(再適用)を参照してください。 {"_underlyingRows", 18} |
これらの変数に加え、ホバーラベルの各グリッドエントリに対して変数が1つ定義されます。この変数の名前の先頭に「_」を付けたものが、グリッドエントリの名前になります。
メモ: これらの変数の例については、散布図行列と楕円のコンテキストを定義する例を参照してください。
ホバーラベル実行コンテキスト変数を使うと、様々な処理が行えます。たとえば、散布図行列のある点にマウスポインタを置くと楕円の拡大画像が表示され、その楕円をクリックするとその楕円に変更を加えられるようにグラフビルダーが開く、といった処理が行えます。この時、ホバーラベル実行コンテキスト変数を使うと、グラフレットに、元の散布図行列のセルにあるものと同じグラフ(そのセルに関連付けられている2つの列の散布図)を表示させることができます。
つまり、サムネールをクリックすると、散布図行列から1つの散布図を「抽出」するような処理を行えます。
散布図行列と楕円のコンテキストを定義する例のスクリプトは、散布図行列から1つの散布図を「抽出」する処理を実現しています。
図12.49 散布図行列で楕円を表示する
次のスクリプトは、ホバーラベル実行コンテキスト変数を用いている例です。このスクリプトは、図12.49に表示されている散布図行列を作成します。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Solubility.jmp" );
win = New Window( "散布図行列 グラフレットの例",
plt = dt << Multivariate(
Y(
"1-オクタノール"n,
:エーテル,
:クロロフォルム,
:ベンゼン,
:四塩化炭素,
:ヘキサン
),
Estimation Method( "Row-wise" ),
Scatterplot Matrix(
Density Ellipses( 1 ),
Shaded Ellipses( 1 ),
Ellipse Color( 69 ),
Horizontal( 1 )
)
)
);
frame = win << xpath( "//FrameBox" );
frame << Set Graphlet(
Picture(
Show( local:_displaySegName );
If( local:_displaySegName == "MarkerSeg",
// 散布図のセル
Graph Builder(
Size( 400, 200 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables(
X( local:_groupings[1] ),
Y( local:_groupings[2] )
),
Elements( Points( X, Y ), Ellipse( X, Y ) )
),
// そうでない場合:行列の対角のヒストグラム
If( local:_N > 5, /* メモ: メインのグラフが
ヒストグラムである場合のみ表示 */
Graph Builder(
Size( 400, 400 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( local:_groupings[1] ) ),
Elements( Histogram( X ) )
),
Graph Builder(
Size( 400, 400 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( local:_groupings[1] ) ),
Elements( Points( X ) )
)
)
);
),
// ドリルダウンの最初のレベル(メインのグラフ)でフィルタをスキップする
SkipFilters( local:_drillDepth == 1 ), // リストなし、つまりすべてのフィルタ
Title( "Graphlet" ),
Reapply( local:_displaySegName == "HistSeg" & local:_N > 5 )
);
図12.50のグラフは、次のようなスクリプトで作成します。棒の上にポインタを置くと、ホバーラベルが表示されます。データの詳細やホバーラベル実行コンテキスト変数がログに表示されます。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Graph Builder(
Size( 528, 450 ),
Show Control Panel( 0 ),
Variables( X( :sex ), Y( :"身長(インチ)"n ) ),
Elements( Bar( X, Y, Legend( 3 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Set Textlet(
Setup(
local:encodedWhere = XML Encode( local:_where );
/* Show()は、ホバーラベル実行コンテキスト変数の
情報をログに出力する */
Show( Namespace( "local" ) << Get Contents() );
),
Markup(
"
<b>Groupings</b>: {local:_groupings}
<b>Measurements</b>: {local:_measurements}
<b>Summary statistic</b>: {local:_summaryStatistic}
<b>Filter columns</b>: {local:_filters}
<b>Where clause</b>: {local:encodedWhere}
<b>Graph type</b>: {local:_displaySegName}
<b>Data table</b> {local:_dataTable}
<b>Drill depth</b>: {local:_drillDepth}
<b>First Row</b>: {local:_firstRow}
<b>Underlying Rows</b>: {local:_underlyingRows}
"
)
)}
)
)
);
図12.50 棒グラフのテキストレット