グリッドレットを使うと、ホバーラベルに表示されるデータの名前と値を自由にカスタマイズすることができます。データの追加・削除や、表示名の変更のほかに、スタイルや数値の表示形式の指定も行えます。
グラフ内のマーカーにポインタを置くと、ホバーラベルにそのデータの情報が表示されます。ホバーラベルに表示されるテキストは、デフォルトでは、ラベル列、および、グラフ要素に使用されているデータテーブル列で構成されます。これらラベル列やデータテーブル列を、ここでは「グリッドエントリ」と呼びます。デフォルトでは、グラフの役割に指定された列の名前(とその値)、および、ラベル列の名前(とその値)が表示されます。これらの列名や値をカスタマイズしたり、他の内容を追加したりできます。具体的には、次のような操作が可能です。
• 列名やその値を追加・削除する
• グリッドラベルの名前を変更する
• 動的な値とクリックアクション(オプション)を持つグリッドエントリを新たに追加する。たとえば、「参照項目」というグリッドエントリを挿入し、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:_上演時間 * 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つだけ指定し、リストのリストでコマンドを指定する方法もあります。
図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: 必須。スクリプトは、ホバーラベル実行コンテキストで評価されます。結果が、新しい行の値として表示されます。詳細は、ホバーラベル実行コンテキストについてを参照してください。
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,
"太字、下線")}}
)
);