スクリプトガイド > スクリプトによるグラフ作成 > ホバーラベル > ホバーラベルの実行コンテキストの操作
公開日: 04/01/2021

ホバーラベルの実行コンテキストの操作

ホバーラベルの実行コンテキスト変数は、グラフレットスクリプトやテキストレットスクリプトの実行環境を定義します。

ローカルデータフィルタ

グラフレットを定義する作業は、データをどのようなグラフにしてサムネールとして表示するかを定義する作業です。しかし、どの行を表示するかは、どうすれば指定できるのでしょうか。

このような情報は、ユーザが基本となるグラフ(グラフレットの定義の追加先であるグラフ)のどの要素にポインタを置くかによって、間接的に指定されます。たとえば、基本のグラフが棒グラフだとしましょう。いずれかの棒にポインタを置くと、その棒に対応するすべての行がグラフに含められます。そうして作成されたグラフがサムネールとしてホバーラベルに表示されるようになります。つまり、ホバーしたグラフ要素が、グラフの作成に使うデータコンテキストとなります。

このデータコンテキストは、Where節として表現され、次のものに従って計算されます。

基本のグラフで使用されているグラフの種類

基本のグラフの各役割が割り当てられている列

調べている特定のグラフ要素の現在の値

生成されたWhere節を使ってローカルデータフィルタが作成され、それがグラフレットの定義で指定されているプラットフォームに適用されます。

ローカルデータフィルタの作成に使うソースとして、次のようなグラフの役割が使用できます。

X(入れ子状の列を含む)

Y(要約統計量などの計算でないもの)

重ね合わせ

数値列は、基本のグラフの種類によって、1つの値との比較に使用されるか、ある範囲に含まれるかどうかを確認されます。ヒストグラムやヒートマップ(さらには箱ひげ図の箱)のように、数値データを棒に分けるグラフは、Where節の該当する範囲を使用します。

基本のグラフに関連付けられているローカルデータフィルタのWhere節も取得されます。

ローカルスコープコンテキスト

グラフレットや他のホバーラベル拡張機能(テキストレットのSetup、グリッドレットのAppendおよびClickスクリプトなど)の属性を構成するJSL式。この名前空間は、実行コンテキストの情報(ホバーラベルのグリッドエントリ、基本のグラフ要素への参照、関連するデータ)を示すローカル変数で初期化されます。これらの変数は、グラフレットプリセットによって頻繁に使用されます。

図12.4に、グラフレットのローカル名前空間に用意されている変数を示します。詳細については、ホバーラベルの実行コンテキスト変数の全体例を参照してください。

注: 変数の使用例を見るには、グラフを右クリックし、[ホバーラベルエディタ]を選択し、[グラフレット]パネルを選択して、いずれかのプリセットを選択します。「イメージ」フィールドに表示されるコードは、いくつのホバーラベル実行コンテキスト変数を使ってグラフレットの動作が制御されるかを示します。

表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", {:Name("身長(インチ)}

_filters

現在のローカルデータフィルタのデータ列参照のリスト

{"_filters", {:性別}}

_where

ホバーしたグラフ要素に関連付けられているWhere節のテキスト表現。式は、解析して、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( :sex ), exm = Mean( :height ) );

次に、別の例を示します。

{"_where", ":性別 == \!"F\!""}

_whereExpr

ホバーしたグラフ要素に関連付けられたWhere節をJSL式にしたもの。

local:_h = Round(Mean( :Name("身長(インチ)")[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つの列の散布図)が表示されます。

サムネールをクリックすると、行列からそのセルを「抽出」するような形になり、そのセルが独立したグラフとして表示されます。

散布図行列と楕円のコンテキストを定義する例のスクリプトを使うと、メインの散布図行列からセルを抽出することができます。

図12.49 散布図行列で楕円を表示する 

Image shown here

散布図行列と楕円のコンテキストを定義する例

次のスクリプトは、スクリプトの実行コンテキストを使用した例です。このスクリプトは、図12.49に表示されている散布図行列を作成します。

Names Default To Here( 1 );
 
dt = Open( "$SAMPLE_DATA/Solubility.jmp" );
win = New Window( "Scatterplot Matrix Graphlet Example",
	plt = dt << Multivariate(
		Y(
			:Name( "1-オクタノール" ),
			:エーテル,
			:クロロフォルム,
			:ベンゼン,
			:四塩化炭素,
			:ヘキサン
		),
		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( :Name("身長(インチ)") ) ),
	Elements( Bar( X, Y, Legend( 3 ) ) ),
	SendToReport(
		Dispatch(
			{},
			"Graph Builder",
			FrameBox,
			{Set Textlet(
				Setup(
					local:encodedWhere = XML Encode( local:_where );
					/* Show()は、ログにあるHLEC変数の
					詳細を表示する */
					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 棒グラフのテキストレット 

Image shown here

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).