以前の役職では、グラフレットのプリセットと [グラフレットの貼り付け] コマンドについて学習しました。 ホバー ラベルでコンテキストを認識したクリック可能な視覚化サムネイルをどのようにサポートするかを説明しました。 これらのコマンドは、JMP 15 ホバー ラベル拡張機能の「陶器」の側面を実装し、コーディング スキルを必要としないユーザー フレンドリーなインターフェイスを提供します。
この投稿では、磁器層に電力を供給する下層の「配管」層について詳しく説明します。 このレイヤーは、ユーザーが直接アクセスできるフレームワークとして設計されており、磁器の機能ではカバーされない要件の実装が可能になります。
ホバーラベル拡張フレームワーク
フレームワークは、基本サービスと拡張ポイントの組み合わせです。 フレームワークの観点から見ると、プリセットとカスタム グラフレットは同一であるため、唯一の違いは次のとおりです。 JMPは、ユーザーの便宜のためにプリセット定義を提供します。
フレームワーク レベルでは、プリセットを含むすべてのグラフレットでグラフレットの設定コマンドを使用しますが、各プリセットは異なる引数セットを使用してフレームワークを初期化します。 これらの引数には、後でコールバックとして使用される JSL スクリプト フラグメントが含まれます。 フレームワークは、視覚要素の上にマウスを移動したり、ホバー ラベルのサムネイルをクリックしたりするなど、ユーザーの操作に応じてこれらのコールバックを評価します。
コールバック評価は内部で行われますホバーラベル実行コンテキスト(HLEC)、基礎となる視覚要素に関するコンテキスト情報をキャプチャします。 コールバックは、このコンテキスト情報を利用して動的な動作を実装できます。 たとえば、ヒストグラム プリセットを考えてみましょう。 コンテキストを調べてベースライン ビジュアライゼーションの Y ロール割り当てを見つけた後、その列を独自の Y ロール割り当てに再利用します。
ホバー ラベル拡張フレームワークへの他のエントリ ポイントには次のものがあります。グラフレットの貼り付け(Set Graphlet のラッパー)、テキストレットの設定、 とグリレットのセット。 この投稿では、例として Set Graphlet コマンドを使用しますが、同じ原則が他のコマンドにも適用されます。
カスタム グラフレットを作成する最良の方法は、ホバーラベルエディタダイアログ。 ホバー ラベル エディターを使用して、グラフレット プリセットがどのように定義されているかを検査することもできます。 プリセット定義は、フレームワーク機能の使用方法の優れた例を提供します。

グラフレットのコールバック
ホバー ラベル エディターのグラフレット パネルでは、いくつかのスクリプト引数が公開されていますが、最も重要なものはピクチャとクリックです。 フレームワークは、次のイベントに応答して実行時にこれらを呼び出します。
- ホバリング:ユーザーが棒グラフの棒の上にマウスを置いたときなど、ユーザーが視覚要素の上にマウス ポインタを短時間置くと、ピクチャ スクリプト フラグメントが実行されます。 そうすると、PictureBox (ディスプレイボックスグラフィックス ピクチャ オブジェクトを含む)、またはディスプレイツリーPictureBox が含まれています。 スクリプトがプラットフォームの実行を要求する場合、スクリプトは非表示のウィンドウ内で起動されます。 次に、フレームワークは結果の表示ツリーを走査し、最初に見つかった PictureBox のスクリーンショットをキャプチャして縮小します。 その画像は、ホバー ラベル内に表示されるサムネイルになります。
- クリック:ユーザーがホバー ラベル グラフレットのサムネイルを左クリックすると、オプションの Click 引数がトリガーされます。 存在しない場合は、Picture スクリプトが再利用されますが、含まれているプラットフォームを実行すると、ウィンドウが表示されます。 これは、プリセットがビジュアライゼーションを開始する方法です。
Click コールバックは、任意の JSL スクリプトを実行できます。 たとえば、Web ページを開いたり、REST 呼び出しを行ったり、ディスクからファイルをロードしたり、テーブルを更新したりできます。 これにより、外部データ、システム、その他の高度なシナリオとの統合が可能になります。
前に述べたように、コールバックの評価は実行コンテキスト内で行われ、実行コンテキストには次の 2 つのコンポーネントがあります。
- ビジュアル要素データと一致するように行をサブセット化するローカル データ フィルター。
- ビジュアル要素の属性を取得するローカル名前空間。
ローカルデータフィルター
グラフ内の各視覚要素は、元のデータのサブセットに対応します。 たとえば、男女別の生徒の身長の平均を示す棒グラフを見てみましょう。 最初のバーは女子学生に対応します。 2つ目は男性用です。 この暗黙的なグループ化は、ビジュアライゼーションの定義中に発生します。
フレームワークは同等のものを通じてグループ化を明示します。ローカルデータフィルター(LDF)。コールバックの実行中に表示されるデータ テーブルの行を制限するために使用されます。 LDF 定義は以下に基づいています。
- ベースラインの視覚化グラフのタイプ。
- グループ化の役割 (X、グループ X/Y、オーバーレイなど) に割り当てられた列。
- これらの列に関連付けられた値。
以下の例では、ベースライン グラフは小さな倍数の棒グラフです。 フレームワークは、次の 2 つのグループ化変数に基づいて、これを LDF にマッピングします。
- X の役割に割り当てられたもの (年齢)。
- グループY(男女)に割り当てられたもの。
ホバーされたバーとグラフを含むパネルがフィルター値を生成する方法に注目してください。

列の包含をさらに制御するには、スキップフィルター属性。 必要になることはほとんどありませんが、基礎となる視覚要素に通常関連付けられているデータよりも多くのデータを表示したい場合に便利です。
背後にある中心的なメカニズムドリルダウンユーザー操作に応じてコンテキストベースの LDF を使用してプラットフォームを起動する機能です。
ローカル名前空間
HLEC の 2 番目のコンポーネントは、ローカル名前空間。 その主な目的は、コンテキスト情報をグラフレットに公開することであり、これにより、グラフレットが動的でコンテキストを認識した動作を示すことができるようになります。 フレームワークは、各グラフレット コールバックを実行する前にローカル名前空間でラップします。
グラフレットのローカル名前空間には、フレームワークによってローカル変数が設定されます。 これらはコンテキスト変数命名規則に従ってください。つまり、名前は常にアンダースコアで始まる必要があります。 これらは、現在の実行コンテキストに関連付けられたさまざまなソースから情報を取得します。
- ホバーされた視覚要素のタイプ (バー、マーカーなど)。
- 関連するデータの最初の行のインデックス。
- 関連するデータ内の観測値の数。
- ホバー ラベル グリッド エントリ (エントリごとに 1 つの変数)。
- コールバックのタイプ (画像、クリックなど)。
- LDF の where 句。
- ドリルダウン レベルが重要です。
デバッグ時に新しいグラフレットの値を確認する簡単な方法は、以下に示すように、値をホバー ラベル自体にテキストとして追加する Textlet コンテキスト プリセットを使用することです。

すべてを一緒に入れて
次の図は、グラフレット プリセットの実行時にフレームワークのさまざまな部分がどのように連携するかを示しています。 カスタム グラフレットでは、ユーザーは Picture スクリプト引数を使用してグラフ テンプレートを提供します。

まず、フレームワークは構成時にグラフ テンプレートとその他の引数をキャプチャします。 その後、ユーザーの操作に応じて、HLEC の一部であるフィルターと名前空間が作成されます。 HLEC 内でテンプレートをインスタンス化して、ホバー ラベルのサムネイル画像を生成します。 ユーザーがその画像をクリックすると、関連するプラットフォームが独自のウィンドウで起動します。
カスタム グラフレットの例
メカニズムは理解できたので、基礎となるグラフレット フレームワークにアクセスすることでユーザーが実際の問題を解決するのにどのように役立ったかを示す例を次に示します。
少し前に、ユーザーがここで質問をしました。 JMPユーザーコミュニティ。 彼女は、実験の画像ファイル (具体的には高解像度の写真) が入ったフォルダーを持っていました。 彼女は実験に関連付けられた画像をホバー ラベルに表示したいと考えていましたが、画像が大きすぎて JMP テーブルに保存できませんでした。 オンデマンドでディスクからロードすることは可能でしたか?
これを実現するにはいくつかの障害がありました。 これは既存のどのプリセットとも一致せず、動的な動作が必要であり、表示される画像のファイル名はオンデマンドで計算する必要があるため、グラフレットの貼り付けには適していませんでした。
解決策は、JSL ファイル プリミティブに基づくコールバックを使用してフレームワークを拡張することで、カスタム グラフレットを作成することでした。
そのソリューションの原理を、Iris データセットに基づく例で以下に示します。 この例の重要な部分は、イメージをディスクから直接ロードする方法を示すことです。 ファイル名は、HLEC ローカル名前空間変数の 1 つに基づいています。 おまけとして、ユーザーが表示された画像をクリックすると、関連する Web ページを開く方法もわかります。
Set Graphlet(
// Value from hover label grid entry (labeled column)
Picture(
Picture Box( Open( img_dir || local:_Species || ".jpg", "jpg" ) )
),
// Value from data table using column reference for visualized row
Click(
Web( "https://en.wikipedia.org/wiki/Iris_" || Column( "Species" )[local:_firstRow] )
)
)

結論
常にプリセットを使用し、グラフレットを貼り付けて要件の大部分を実装できることを願っていますが、それが常に可能であるとは限らないことも承知しています。 フレームワークを使用すると、特別な必要があるときはいつでも、独自のカスタム ホバー ラベル拡張機能を作成できます。
質問がある場合、自分の作品を共有したい場合、または他のユーザーが何を考えているかを見たい場合は、ここに参加してください。 JMPユーザーコミュニティ。 次回のクールなグラフレットにお会いできることを楽しみにしています。