グラフレットを使い、ホバーラベルに関連するグラフや画像のサムネールを追加することができます。グラフや画像にアクションを関連付ければ、マウスでクリックしたときにアクションが呼び出されるようになります。たとえば、クリックすればグラフが開くようにしたり、画像をクリックすると関連するリンクが開くようにしたりできます。
図12.40にあるJMPマンのグラフをクリックすると、グラフビルダーが開き、グラフをカスタマイズすることができます。グラフをプラットフォームで開き、カスタマイズし、変更後のグラフを元のグラフの中に保存する方法については、『JMPの使用法』のグラフのカスタマイズを参照してください。
図12.40 グラフレットの例
図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( "標準偏差" )
)
)
);
// グラフフレームへの参照を取得する
frame = (gb << Report)[FrameBox(1)];
/* [グラフレットの設定]コマンドでグラフを定義する。
このグラフが”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 主成分分析のグラフレット
図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( "デフォルト" ),
"相関係数行列から"
)
)
)}
)
)
);
ホバーレベルにグラフまたは画像のサムネールを追加するために必要なスクリプト。
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で入力されたスクリプトがホバーラベル実行コンテキストのスコープで評価されます。
オプションのスクリプト。デフォルトでは、ホバーラベルをカスタマイズするコンテキスト(グラフレットなど)で実行されるすべてのコードは、ホバーしたグラフ要素(たとえば棒グラフ内の棒)で定義されているコンテキストで実行されます。このコンテキストには、現在のグラフで割り当てられている役割に応じたローカルデータフィルタが含まれるため、通常は思いどおりの内容になります。しかし、場合によっては、フィルタ(またはその一部)を使わずにグラフに元のデータをより多く含めたいことがあります。
• 「フィルタのスキップ」フィールドの評価が0以外の値(通常は1のような正の整数)になる場合は、新しいグラフレットに適用されるフィルタから、「フィルタをスキップする列」で選択された列が除外されます。
• そうでない(たとえば評価が0になる)場合は、選択された列は無視され、フィルタが通常どおりに作成されます。
• 「フィルタをスキップするフラグ」フィールドが空白で、「フィルタをスキップする列」で列が選択されていない場合(デフォルト)、新しいウィンドウのフィルタは列をスキップせずに作成されます。「フィルタをスキップするフラグ」はJSL式であり、内容によってはかなり複雑になります。
• 「フィルタをスキップするフラグ」フィールドが空白ではなく、「フィルタをスキップする列」が空白である(列が選択されていない)場合は、すべての列がフィルタリングされ、グラフレットまたは新しいグラフに元のグラフで使われたデータがすべて含まれます。散布図行列と楕円のコンテキストを定義する例を参照してください。
ここで、「San Francisco Crime.jmp」データテーブルを開き、事件数の推移を調べたいとしましょう。「日付」をXとし、「警察管轄区域」を重ね合わせて折れ線グラフを作成します。Y軸には何も割り当てません。線は、各区域の度数の推移を示します。次に、グラフレットを使って各区域の事件数の推移を種類別に見たいとしましょう。種類別に表示する新しいグラフを作成し、[スクリプトの保存]>[クリップボードへ]を選択します。元のグラフで[ホバーラベル]>[グラフレットの貼り付け]を選択してグラフレットを作成します。ところが、ホバーラベルを見ると(図12.42)、思っていたものとは異なるグラフが表示されています。
図12.42 フィルタリングされた最初のデータ
JMPは、[X]と[重ね合わせ]に従ってフィルタを作成しました。これを簡単に確認するには、グラフレットをクリックして新しいグラフを開き、ローカルデータフィルタを展開します(デフォルトでは左側に折りたたんだ状態で表示されます)。1日分のデータにフィルタリングされたため、折れ線グラフのはずがマーカープロットのようになってしまったのです(図12.43)。
図12.43 ローカルデータフィルタと、マーカープロットのような折れ線グラフ
[重ね合わせ]の値を使って新しいグラフのデータを絞り込みたいものの、日付の値で絞り込まれては困るわけです。「SOUTHERN」という警察管轄区域でフィルタリングし、同時に「04/14/2012」という日付ではフィルタリングしないようにします。
それには、「フィルタをスキップするフラグ」を使って元のグラフから日付のフィルタを除外します。ホバーラベルエディタで、次のようなスクリプトを作成します。
図12.44 ホバーラベルエディタで「フィルタをスキップするフラグ」を使った例
日付のフィルタを除外すると、ホバーラベルに思ったとおりのグラフが表示されるようになります(図12.45)。
図12.45 「フィルタをスキップするフラグ」を1にした折れ線グラフ
図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( :Date ), Overlay( :Category ) ),
Elements( Line( X, Legend( 1 ) ), Smoother( X, Legend( 2 ) ) )
)
),
Skip Filters( 1, {:日付} )
)}
)
)
);
「フィルタをスキップするフラグ」フィールドにある式は、ホバーしたグラフ要素のコンテキストで評価されます。式の評価が真の値(通常は1のような正の整数)になる場合は、新しいグラフレットに適用されるフィルタから、「フィルタをスキップする列」で選択された列が除外されます。そうでない(たとえば評価が0になる)場合は、選択された列は無視され、フィルタが通常どおりに作成されます。
Titleは、評価が文字列になる式です。結果が、グラフを含んだウィンドウのタイトルバーにタイトルとして表示されます。ホバーラベルの評価コンテキストで定義した変数をTitle式で使用することができます。
たとえば次の式は、基本のグラフの種類と、これまでに使ったドリルレベルの数を示します。
Title( || local:_displaySegName ||
"のグラフレット、深さは " || Char( local:_drillDepth ))
Title式を指定しなかった場合、新しいウィンドウの名前は「グラフレット」になります。
注: JMPインターフェースでは、「タイトル」は、グラフレットのホバーラベルエディタの「その他」タブにあります。
Reapplyの式を使用すると、グラフレットの定義を、画像のクリック時に新しく作成されるグラフやプラットフォームに再適用することができます。これは、グラフレットを使ったドリルダウン機能の背後にある仕組みです。
Reapply( local:_underlyingRows > 1 )
注: JMPインターフェースでは、「再適用」は、グラフレットのホバーラベルエディタの「その他」タブにあります。
「再適用」が空白(デフォルト設定)の場合、グラフレットの定義は再適用されません。このグラフレットをクリックしたときに開く新しいウィンドウでは、ホバーラベルにグラフレットは表示されません。