グリッドレットを使うと、ホバーラベルに表示されるデータの名前と値を自由にカスタマイズすることができます。データの追加、削除、名前変更だけでなく、スタイルや数値形式の変更も可能です。
グラフ内のマーカーにポインタを置くと、ホバーラベルにマーカーの内容が表示されます。グリッドエントリは、ホバーラベルにデフォルトで表示されるテキストで、ラベル列、またはグラフ要素に対応する列から取ったものです。デフォルトでは、役割に対応する列名(とその値)が、ラベル列と共に表示されます。この列名や値をカスタマイズしたり、他の内容を追加したりできます。具体的には、次のような操作が可能です。
• 列名やその値を追加・削除する
• グリッドラベルの名前を変更する
• 動的な値とオプションのクリックアクションを持つグリッドエントリを新たに追加する。たとえば、「参照項目」というエントリを挿入し、Wikipediaの該当ページへのリンクを値とすることができます。
• テキストにスタイルを適用する(テキストの書式を太字にするなど)
• 数値の形式を設定する(小数点以下桁数を2にするなど)
図12.46は、「ジャンル」、「タイトル」、「上映時間(分)」を追加し、上映時間の数値の表示形式を変え、「ジャンル」を太字にしています。
図12.46 カスタマイズしたグリッドレット
図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:_Length * 60 )}}
),
Reformat(
// 「上映時間(分)」の表示形式を変える
{{Matcher( "上映時間(分)" ), Format( "hr:m", 80 ), 80}}
),
Style(
// 「ジャンル」を9ポイントの太字にする
{{Matcher( "ジャンル", Scope( Name ) ), Font("MS UI Gothic", 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で。
たとえば、Mean(:Name("身長(インチ)"))のグリッドエントリは、次のものに対してマッチングできます。
• 名前 Name(:Name("身長(インチ)"))
• 列参照 :Name("身長(インチ)")
• 正規表現 PatReg("^.*\(:Name("身長(インチ)")\)$")
• 特殊な引数Allは、グリッド内のすべての行をマッチングします。
一致するものがある場合、マッチしたエントリに対して、コマンドに関連付けられているアクションが引数を使って実行されます。
例外は、Annexコマンドです。このコマンドは、既存のエントリに一致するものがない場合に、グリッドに新しいエントリを追加します(予期しない名前の競合を防ぐため)。
この例は、データテーブルにラベル列がない場合にExpungeコマンドを使ってホバーラベルに追加された最初のエントリを削除し、2つのAnnexコマンドのインスタンスで新しい行を追加する方法を示します。Annexのインスタンスを1つだけ使い、それをリストのリストに渡す方法もあります。
図12.47は、元のホバーラベルと変更後のホバーラベルです。ラベルから「行」が削除され、「タイトル」と「ジャンル」が追加されています。
図12.47 ExpungeコマンドとAnnexコマンドの例
図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: 必須。スクリプトは、ホバーラベルの実行コンテキストで評価されます。結果が、新しい行の値として表示されます。詳細は、ホバーラベルの実行コンテキストの操作を参照してください。
• Click:オプション。Clickは、追加したエントリの値をユーザがクリックすると、ホバーラベル実行コンテキストで評価されます。このオプションは、グラフレットのClick属性と等価です。このオプションを使うと、新しいエントリの値の部分が、クリック可能であることを示すためにリンクスタイル(下線を引いた青色のテキスト)で表示されます。
box << Set Gridlet(
Annex( { "LDL, HDL", value(
Char(:LDL[local:_firstRow]) || ", " || Char(:HDL[local:_firstRow])
) })
);
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( {:Name("身長(インチ)"), Format( "指数表現", 10, 4 )} ) );
Style({Matcher, <style1>, <style2>, ...})は、Matcherとスタイルの引数を取ります。次のようなスタイルが使用できます。
• Background Color(背景色)
• Text Color(テキストの色)
• Font(フォント)、さらにフォントファミリ、サイズ、スタイル
• Justification(配置)(左寄せ、中央寄せ、右寄せ)
• 一致したエントリには、指定のスタイルが適用されます。
box << Set Gridlet(
Style(
{{Matcher( "性別" ), Text Color( "赤" ), Font("メイリオ", 14,
"太字、下線")}}
)
);