グリッドレットを使うと、ホバーラベルに表示されるデータの名前と値を自由にカスタマイズすることができます。ホバーラベルのデータの追加・削除や、表示名の変更のほかに、スタイルや数値の表示形式の指定も行えます。
グラフのマーカーにポインタを置くと、ホバーラベルにそのデータの情報が表示されます。ホバーラベルに表示されるテキストは、デフォルトでは、ラベル列、および、グラフ要素に使用されているデータテーブル列で構成されます。これらラベル列やデータテーブル列を、ここでは「グリッドエントリ」と呼びます。デフォルトでは、グラフの役割に指定された列の名前(とその値)、および、ラベル列の名前(とその値)が表示されます。これらの列名や値をカスタマイズしたり、他の内容を追加したりできます。具体的には、次のような操作が可能です。
• 列名やその値を追加・削除する
• グリッドラベルの名前を変更する
• 動的な値とクリックアクション(オプション)を持つグリッドエントリを新たに追加する。たとえば、「参照項目」というグリッドエントリを挿入し、Wikipediaのページへのリンクを値とすることができます。
• テキストにスタイルを適用する(テキストを太字にするなど)
• 数値の表示形式を設定する(小数点以下の桁数を2にするなど)
Figure 12.46では、「ジャンル」・「タイトル」・「上演時間」を追加し、上演時間のラベルと表示形式を変え、「ジャンル」を太字にしています。
図12.46 カスタマイズしたグリッドレット
Figure 12.46のグラフとホバーラベルは、次のようなスクリプトで作成できます。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Movie Inventory.jmp" );
// ベースとなるグラフを作成するdt << Graph Builder(Size( 534, 456 ),
Show Control Panel( 0 ),Variables( X( :年 ), Y( :上演時間 ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) ),
SendToReport(
Dispatch(
{}, "Graph Builder",FrameBox,
{Set Gridlet( // 「上演時間」列を削除する Expunge( {{Matcher( "上演時間" )}} ), // 「タイトル」、「ジャンル」、「時間」列を追加するAnnex(
{{Matcher( "タイトル" ), value( :タイトル[local:_firstRow] )}, {Matcher( "ジャンル" ), value( :ジャンル[local:_firstRow] )}, {Matcher( "時間" ), value( local:_上演時間 * 60 )}}),
Reformat(
// 「時間」の表示形式を変える {{Matcher( "時間" ), Format( "hr:m", 80 ), 80}}),
Style(
// 「ジャンル」を9ポイントの太字にする {{Matcher( "ジャンル", Scope( Name ) ), Font("メイリオ", 9, "太字")}}
)
), Add Pin Annotation(
Seg( Marker Seg( 1 ) ), Index( 33 ), Index Row( 33 ), UniqueID( 610643713 ), FoundPt( {508, 199} ), Origin( {1964.8951552795, 199.00456244898} ), Tag Line( 1 ))}
)
)
);
どのSet Gridletコマンドの場合も、最初の引数は、アクションのスコープ(対象となるグリッドエントリ)を指定するMatcherです。Matcherは、次の項目を参照できます。
• 1つのグリッドエントリ: 名前で参照します。指定した文字列と同じ名前のグリッドエントリが参照されます。ホバーラベルに表示されるテキストは、デフォルトでは、ラベル列、および、グラフ要素に使用されているデータテーブル列で構成されます。これらラベル列やデータテーブル列を、ここでは「グリッドエントリ」と呼びます。
• 複数のグリッドエントリ: 列参照、正規表現、または引数Allで参照する。
たとえば、「平均(身長)」というグリッドエントリは、次のような指定で参照されます。
• 名前そのもの "平均(身長)"n
• 列参照 :身長
• 正規表現 PatReg("^.*\(身長\)$")
• 特殊な引数Allは、グリッド内のすべての行とマッチします。
これらの指定にマッチしたグリッドエントリがあった場合、それらのグリッドエントリに対して、コマンドで指定された引数のアクションが実行されます。
例外は、Annexコマンドです。このコマンドは、既存のグリッドエントリにマッチするものがない場合に、グリッドに新しいグリッドエントリを追加します(予期しない名前の競合を防ぐため)。
以下の例では、データテーブルにラベル列がない場合にExpungeコマンドによってホバーラベルに追加された最初のエントリを削除し、2つのAnnexコマンドによって新しい行を追加します。Annexを1つだけ指定し、リストのリストでコマンドを指定する方法もあります。
Figure 12.47は、元のホバーラベルと変更後のホバーラベルです。ラベルから「行」が削除され、「タイトル」と「ジャンル」が追加されています。
図12.47 ExpungeコマンドとAnnexコマンドの例
Figure 12.47にある変更後のホバーラベルは、次のようなスクリプトで作成します。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Movie Inventory.jmp" );
// ベースとなるグラフを作成するgb = dt << Graph Builder(Size( 526, 454 ),
Show Control Panel( 0 ),Variables( X( :年 ), Y( :上演時間 ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
rpt = gb << Report();box = rpt[Framebox( 1 )];box << Set Gridlet(// 「行」を削除する Expunge( {{Matcher( 1 )}} ),Annex(
// ホバーラベルに「タイトル」列と「ジャンル」列を追加する {{Matcher( "タイトル" ), value( :タイトル[local:_firstRow] )}, {Matcher( "ジャンル" ), value( :ジャンル[local:_firstRow] )}})
);
Annex({matcher, value(<script>), <Click(<script>)>})は、ホバーラベルのグリッドに新しい行を追加します。Annexコマンドは、ホバーラベルエディタの「グリッドレット」パネルにある「追加」タブに該当します。
このコマンドは、3つの引数を取ります。
• Matcher: 新しい名前。Matcherで指定する名前は既存の名前と一致してはいけません。
• Value: 必須。スクリプトは、ホバーラベル実行コンテキストで評価されます。結果が、新しい行の値として表示されます。詳細は、ホバーラベル実行コンテキストについてを参照してください。
box << Set Gridlet(
Annex( { "LDL, HDL", value(Char(:LDL[local:_firstRow]) || ", " || Char(:HDL[local:_firstRow])
) })
);
• Click: オプション。Clickは、追加したグリッドエントリの値をユーザがクリックすると、ホバーラベル実行コンテキストで評価されます。このオプションは、グラフレットのClick属性と等価です。このオプションを使うと、新しいエントリの値の部分が、クリック可能であることを示すためにリンクスタイル(下線を引いた青色のテキスト)で表示されます。
Expunge({Matcher})は、Matcherにマッチしたものを削除します。Expungeコマンドは、ホバーラベルエディタの「グリッドレット」パネルにある「削除」タブに該当します。
一致するエントリがすべてグリッドから削除されます。
box << Set Gridlet( Expunge( {"年齢"} ) );Rename({Matcher, Value(<string>)})は、一致したグリッドエントリの名前部分を、指定した値で置換します。Renameコマンドは、ホバーラベルエディタの「グリッドレット」パネルにある「名前の変更」タブに該当します。
box << Set Gridlet( Rename( {Matcher( "名前" ), Value( "学生" )} ), );Reformat({Matcher, <format>})は、Matcherと引数を取ります。この引数は、一致したグリッド行の数値に適用する表示形式を指定します。一致したグリッドエントリに、指定した表示形式が適用されます。
box << Set Gridlet( Reformat( {:"身長(インチ)"n, Format( "指数表現", 10, 4 )} ) );Style({Matcher, <style1>, <style2>, ...})は、Matcherとスタイルの引数を取ります。次のようなスタイルがサポートされています。
• Background Color(背景色)
• Text Color(テキストの色)
• Font(フォント)(フォントファミリ、サイズ、スタイル)
• Justification(配置)(左寄せ、中央寄せ、右寄せ)
• 一致したグリッドエントリに、指定したスタイルが適用されます。
box << Set Gridlet(
Style(
{{Matcher( "性別" ), Text Color( "Red" ), Font("メイリオ", 14,"太字、下線")}}
)
);