スクリプトガイド > スクリプトによるグラフ作成 > ホバーラベル > グラフレットを使ってホバーラベルにグラフや画像を追加する
公開日: 09/19/2023

グラフレットを使ってホバーラベルにグラフや画像を追加する

グラフレットを使い、関連するグラフや画像のサムネールをホバーラベルに追加することができます。グラフや画像にアクションを関連付ければ、それらをマウスでクリックしたときのアクションを定義することも可能です。たとえば、クリックすればグラフが開くようにしたり、画像をクリックすると関連するリンクが開くようにしたりできます。

グラフビルダー内のグラフレットの例

Figure 12.40のグラフでは、JMPマンのグラフがホバーラベルとして呼び出され、それをクリックすると、JMPマンのグラフがグラフビルダーで開かれます。グラフをプラットフォームで開き、カスタマイズし、変更後のグラフを元のグラフの中に保存する方法については、『JMPの使用法』のグラフのカスタマイズを参照してください。

図12.40 グラフレットの例 

グラフレットの例

Figure 12.40のグラフとホバーラベルは、次のスクリプトで作成されています。

Names Default To Here( 1 );
// データテーブルを開く
dt = Open( "$SAMPLE_DATA/JMP Man Dozen.jmp" );
 
// ベースとなるグラフを作成する
gb = Graph Builder(
    Size( 529, 466 ),
    Show Control Panel( 0 ),
    Variables( X( :Data Set ), Y( :X ), Y( :Y, Position( 1 ) ) ),
    Elements(
        Bar(
            X,
            Y( 1 ),
            Y( 2 ),
            Legend( 12 ),
            Error Interval( "Standard Deviation" )
        )
    )
);
 
// グラフのフレームボックスへの参照を取得する
frame = (gb << Report)[FrameBox(1)];
 
/* "Set Graphlet"コマンドでグラフを定義する。
このグラフが"Picture"属性を使ってホバーラベル内に描画される */
frame << Set Graphlet(
    /* "Picture"属性の値は、JSLフラグメントとして評価され、サムネールの生成に使われる。
		サムネールはホバーラベルの中に表示される。
		この例では、ホバーラベルにキャプション付きの散布図が表示される*/
	Picture(
        Graph Builder(
            Show Control Panel( 0 ),
            Variables( X( :X ), Y( :Y ) ),
            Elements(
                Points( X, Y, Legend( 1 ) ),
                Line Of Fit( X, Y, Legend( 3 ) ),
                Caption Box( X, Y, Legend( 4 ),
			 Summary Statistic( "5 Number Summary" ) )
            )
        )
    /* オプションの"Click"属性が定義されていないため、
			ユーザがグラフレットのサムネールをクリックすると
			"Picture"属性のスクリプトを再利用して関連するプラットフォームが起動される*/
	)
);

主成分分析でのグラフレットの例

「主成分分析」プラットフォームでグラフレットを作成してみましょう。ユーザがホバーラベルをクリックすると、「主成分分析」レポートのウィンドウが開くようにします。ユーザは、その呼び出された「主成分分析」レポートのウィンドウにて、データをさらに探索したり、フィルタリングしたりできます。

図12.41 主成分分析のグラフレット 

主成分分析のグラフレット

Figure 12.41のグラフレットは、次のようなスクリプトで作成できます。

dt = Open( "$SAMPLE_DATA/Iris.jmp" );
gb = dt << Graph Builder(
	Size( 531, 451 ),
	Show Control Panel( 0 ),
	Variables( X( :種類 ), Y( :がくの幅 ) ),
	Elements( Treemap( X, Y, Legend( 4 ) ) ),
	SendToReport(
		Dispatch(
			{},
			"Graph Builder",
			FrameBox,
			{Set Graphlet(
				Picture(
					Principal Components(
						Y( :がくの長さ, :がくの幅, :花弁の長さ,
						:花弁の幅 ),
						Z( :種類 ),
						Estimation Method( "Default" ),
						"on Correlations"
					)
				)
			)}
		)
	)
);

グラフレットのコマンド

Picture(画像)

このコマンドは、ホバーレベルにグラフや画像のサムネールを追加します。

Picture()は、常に現在のグラフ要素におけるホバーラベル実行コンテキスト内で実行されます。(ローカルデータフィルタの外側で)最初に見つかったPicture Boxによって、画像が表示されます。

Picture()がプラットフォームの呼び出しである場合は、ローカルデータフィルタが適用されます。

...
Picture(
        Graph Builder(
            Show Control Panel( 0 ),
            Variables( X( :X ), Y( :Y ) ),
            Elements(
                Points( X, Y, Legend( 1 ) ),
                Line Of Fit( X, Y, Legend( 3 ) ),
                Caption Box( X, Y, Legend( 4 ),
					 	Summary Statistic( "5 Number Summary" ) )
            )
        )		...

例の全体像は、グラフレットを使ってホバーラベルにグラフや画像を追加するを参照してください。

クリック

画像をクリックした時に、ユーザ定義のアクションが実行されるようにするためのオプションのスクリプトです。

クリックすると、専用のウィンドウの中でメインのグラフのプラットフォーム(たとえば、グラフビルダー)が実行されます。

Clickを指定しない場合、Pictureで入力されたスクリプトがホバーラベル実行コンテキストのスコープで評価されます。

Skip Filters(フィルタのスキップ)

このコマンドは、デフォルトのフィルタリング設定を変更したい時にオプションで指定するものです。デフォルトでは、ホバーラベル(グラフレットなど)を描くコードは、ホバーラベルを呼び出した元のグラフ要素(たとえば棒グラフにける1本の棒)で定義されているコンテキスト内で実行されます。この時、現在のグラフで割り当てられている役割に応じてデータがローカルデータフィルタによりフィルタリングされ、そのフィルタリングされたデータだけからホバーラベルが描かれます。しかし、場合によっては、そのようなフィルタリングをせずに、ホバーラベルを描きたい場合もあるでしょう

インターフェースでの「フィルタをスキップするフラグ」が0以外の値(通常は1のような正の整数)である場合は、新しいグラフレットに適用されるフィルタから、「フィルタをスキップする列」で指定された列が除外されます。

そうでない場合(つまり、「フィルタをスキップするフラグ」が0である場合)は、「フィルタをスキップする列」での指定は無視され、デフォルト通りにフィルタリングが行われます。

「フィルタをスキップするフラグ」が空白で、「フィルタをスキップする列」で列が選択されていない場合(これはデフォルトの設定です)、すべての列がスキップされずにフィルタリングが行われます。「フィルタをスキップするフラグ」にはJSL式を指定でき、やりたいことを実現しようとするとかなり複雑になるかもしれません。

「フィルタをスキップするフラグ」が空白ではなく、「フィルタをスキップする列」が空白である(列が選択されていない)場合は、すべての列がスキップされ、グラフレットや新しいグラフに元のグラフで使われたデータがすべて含まれます。散布図行列と楕円のコンテキストを定義する例を参照してください。

ここで、「San Francisco Crime.jmp」データテーブルを開き、事件数の推移を調べたいとしましょう。「日付」をXとし、「警察管轄区域」を重ね合わせて折れ線グラフを作成します。Y軸には何も割り当てません。線は、各区域の度数の推移を示します。次に、グラフレットを使って各区域の事件数の推移を種類別に見たいとしましょう。種類別に表示する新しいグラフを作成し、[スクリプトの保存]>[クリップボードへ]を選択します。元のグラフで[ホバーラベル]>[グラフレットの貼り付け]を選択してグラフレットを作成します。ところが、ホバーラベルを見ると(Figure 12.42)、思っていたものとは異なるグラフが表示されています。

図12.42 フィルタリングされたデータ 

フィルタリングされたデータ

JMPは、[X]と[重ね合わせ]に従ってフィルタを作成しました。これを簡単に確認するには、グラフレットをクリックして新しいグラフを開き、ローカルデータフィルタを展開します(デフォルトでは左側に折りたたんだ状態で表示されます)。1日分のデータにフィルタリングされたため、折れ線グラフのはずが点グラフのようになってしまったのです(Figure 12.43)。

図12.43 ローカルデータフィルタと、点グラフのような折れ線グラフ 

ローカルデータフィルタと、点グラフのような折れ線グラフ

[重ね合わせ]の列の値を使って新しいグラフのデータを絞り込みたいものの、日付の値で絞り込まれては困るわけです。そこで、「SOUTHERN」などの警察管轄区域ではフィルタリングするけれど、「04/14/2012」などの日付ではフィルタリングしないようにします。

それには、「フィルタをスキップするフラグ」に1を指定し、また、元のグラフから「日付」のフィルタを除外します。そのために、下図のように、ホバーラベルエディタの「フィルタをスキップするフラグ」に、「1」と指定します。

図12.44 ホバーラベルエディタで「フィルタをスキップするフラグ」を使った例 

ホバーラベルエディタで「フィルタをスキップするフラグ」を使った例

そのように設定した後に、「日付」列をスキップするようにすると、ホバーラベルに期待どおりのグラフが表示されるようになります(Figure 12.45)。

図12.45 「フィルタをスキップするフラグ」を1にした折れ線グラフ 

「フィルタをスキップするフラグ」を1にした折れ線グラフ

Figure 12.45のグラフは、次のようなスクリプトによっても作成できます。

Names Default To Here( 1 );
 
dt = Open( "$SAMPLE_DATA/San Francisco Crime.jmp" );
gb = dt << Graph Builder(
	Size( 528, 456 ),
	Show Control Panel( 0 ),
	Variables( X( :日付 ), Overlay( :警察管轄区域 ) ),
	Elements( Line( X, Legend( 4 ) ) ),
	SendToReport(
		Dispatch(
			{},
			"Graph Builder",
			FrameBox,
			{Set Graphlet(
				Picture(
					Graph Builder(
						Size( 528, 456 ),
						Show Control Panel( 0 ),
						Variables( X( :日付), Overlay( :種類 ) ),
						Elements( Line( X, Legend( 1 ) ), Smoother( X,
							Legend( 2 ) ) )
					)
				),
				Skip Filters( 1, {:日付} )
			)}
		)
	)
);

「フィルタをスキップするフラグ」に指定する式は、ホバーしたグラフ要素のコンテキスト内で評価されます。指定した式を評価した値が0以外(通常は1のような正の整数)になる場合は、新しいグラフレットに適用されるフィルタから、「フィルタをスキップする列」で選択された列が除外されます。そうでない場合(0になる場合)は、選択された列は無視され、デフォルト通りのフィルタリングが適用されます。

Title(タイトル)

Titleは、評価が文字列になる式です。結果が、グラフを含んだウィンドウのタイトルバーにタイトルとして表示されます。Titleの式では、ホバーラベルの評価コンテキストで定義された変数を使用できます。

たとえば次の式は、グラフの種類と、これまでに使ったドリルの水準数を示します。

Title( local:_displaySegName ||
       "のグラフレット、深さは " || Char( local:_drillDepth ))

Title式を指定しなかった場合、新しいウィンドウの名前は「グラフレット」になります。

メモ: JMPインターフェースでは、「タイトル」は、グラフレットのホバーラベルエディタの「その他」タブにあります。

Reapply(再適用)

Reapplyの式を使用すると、グラフレットの定義を、画像のクリック時に新しく作成されるグラフやプラットフォームに再適用することができます。これは、グラフレットを使ったドリルダウン機能を実現するための仕組みです。

Reapply( local:_underlyingRows > 1 )

メモ: JMPインターフェースでは、「再適用」は、グラフレットのホバーラベルエディタの「その他」タブにあります。

「再適用」が空白(デフォルト設定)の場合、グラフレットの定義は再適用されず、このグラフレットをクリックしたときに開く新しいウィンドウでは、ホバーラベルにグラフレットは表示されません。

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