DC.jsキャンバス散布図ホバー情報を使用して別のグラフを更新する

joshp

DC.jsキャンバスチャートにカーソルを合わせ、カーソルを合わせたポイントを使用して別のチャートに変更を適用したいと思います(つまり、そのポイントに関する情報を別のチャートに表示します)。

合併症:

  • それは私がホバリングするキャンバスプロットです
  • すべては、仮想DOMのコンテキスト内で実行する必要があります

このようなレンダーレットになると思いますが、キャンバスプロットなのでかなり注意が必要です

このブロックのように、キャンバスであるために非表示の要素を使用する必要があると思います

必要な動作がオレンジと緑のプロットをホバリングする場所にStackblitzを配置しました。他のスキャッターは、それぞれのグループポイントに対していくつかの(この例では任意の)プロパティが変更されています

ゴードン

涼しい!あなたがこれを理解し、あなたの答えを発表してくれてうれしいです。これは他の人にも役立ちます。

あなたの本能は、内部ループ内で高価な初期化を行わないのは正しいことです。

レンダーレットハンドラーで作業を行うのは問題ありませんこれは、グラフがレンダリングまたは再描画されたとき、およびデータが変更されたときに発生するため、理にかなっています。

ただし、mousemoveリスナー内でクアッドツリーを計算するような高価な計算はインタラクティブであるため、お勧めできません

速度は完全に良いように見えますが、私はまともなiMacを持っており、ローエンドのマシンではパフォーマンスが厄介かもしれません。

私は次のようにコードを構成します:

  eventScatterChart.on("renderlet", c => {
    // 0
    const xScale = c.x();
    const yScale = c.y();
    const data = c.group().all() // 1
        .filter(({value}) => value) // 2
        .map(({key}) => key); // 3
    // 4
    const overlayPos = c.select('.overlay').node().getBBox();
    const tree = d3
      .quadtree()
      .extent([
        [xScale.invert(overlayPos.x), yScale.invert(overlayPos.y)],
        [xScale.invert(overlayPos.width), yScale.invert(overlayPos.height)]
      ])
      .addAll(data);

    c.select(".overlay").on("mousemove.eventID", function(event) {
      // 5
      const cursorX = d3.pointer(event)[0];
      const cursorY = d3.pointer(event)[1];

      const closestPoint = tree.find(
        xScale.invert(cursorX),
        yScale.invert(cursorY)
      );
      console.log(closestPoint);
    });
  });
  1. レンダーレットは、初期化を行うのに適した場所です。また、チャートが描かれるまで、xとyのスケールが定義されていないこともわかりました。

  2. ディメンションではなくグループからデータをフェッチして、他のディメンションのフィルターを監視するようにします。

  3. ポイントが「フィルターで除外」された場合でもエントリvalueはありますが、0なので、それらを削除します。非表示のポイントにカーソルを合わせると、最も近い表示ポイントが選択されます。

  4. グループのキーは、次元キーを次のように定義したため、最初の要素としてx、yを含む配列です。

     const dimension = ndx.dimension(d => [
       d.changePointTime,
       d.photonCountsMean,
       d.transitionDirection === -1 ? "BG" : "Signal"
     ]);
    
  5. 前とまったく同じようにクアッドツリーを初期化します。

  6. これで、mousemoveイベントハンドラーは本当にシンプルになり、ルックアップのみを実行します。かなり効率的であるはずです!

私はそれがCPU使用率を助けないことを発見しました(それでも1つのプロセッサをペグします)、しかし数字はブラウザコンソールではるかに速く飛んでいました。パフォーマンスをさらに向上させたい場合は、mousemoveイベントを調整できます。(ブラウザーは1秒あたり数百を生成できます。)

あなたのstackblitzのフォーク

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

DC.jsキャンバス散布図ホバー情報を使用して別のグラフを更新する

分類Dev

ブラシを使用してDC.JS散布図の最高点を選択する方法

分類Dev

GCEUbuntuのDC / OS

分類Dev

dc.jsを使用して設定した特定の条件で散布図を表示する方法

分類Dev

次のタイプのデータを使用してDC.jsで複数の折れ線グラフをレンダリングする方法-JAVASCRIPT(DC.js)

分類Dev

次のタイプのデータを使用してDC.jsで複数の折れ線グラフをレンダリングする方法-JAVASCRIPT(DC.js)

分類Dev

dc.js-グラフの外側のグラフからマウスオーバー値を表示します

分類Dev

dc.jsを使用して円グラフの中央に値を表示する方法

分類Dev

Dc-サンバースト、dc-Menuslect、dc-非インタラクティブグラフ

分類Dev

サーバーでクロスフィルターを使用してクライアント側でdc.jsを使用する

分類Dev

dc.js散布図とelasticYの動作

分類Dev

奇妙なLDAPフィルター(メンバー<==> CN = usera、OU = xxx、OU = xxx、DC = abc、DC = corp、DC = xyz、DC = com)

分類Dev

棒グラフのdc.jsしきい値/カラーバンド

分類Dev

dc.js-チャートグループのレンダリングをリッスンしています

分類Dev

レンダーレットを使用したdc.jsチャートのバックグラウンドでのレンダリング

分類Dev

レンダーレットを使用したdc.jsチャートのバックグラウンドでのレンダリング

分類Dev

dc.js棒グラフをクリック可能ではなく、ホバー可能にする方法を教えてください。

分類Dev

2つのチャートをオーバーレイするdc.js

分類Dev

円グラフdc.jsの小数を削除します

分類Dev

プライマリDCがダウンしているときにDCをフェイルオーバーする方法

分類Dev

CrossfilterとDC.jsの平均

分類Dev

ネストされたJSONでdc.jsを使用して棒グラフを作成する

分類Dev

dc折れ線グラフは、クリックするとデータポイント情報をポップアップします

分類Dev

dc.jsとクロスフィルターを使用した面グラフ

分類Dev

既存のフィルターを使用してすべてのdc.jsチャートを再描画します

分類Dev

DCで精度を失う

分類Dev

DCで精度を失う

分類Dev

dc.jsを使用して円グラフの外部ラベルが重ならないようにする方法

分類Dev

dc.js pieChart slice move

Related 関連記事

  1. 1

    DC.jsキャンバス散布図ホバー情報を使用して別のグラフを更新する

  2. 2

    ブラシを使用してDC.JS散布図の最高点を選択する方法

  3. 3

    GCEUbuntuのDC / OS

  4. 4

    dc.jsを使用して設定した特定の条件で散布図を表示する方法

  5. 5

    次のタイプのデータを使用してDC.jsで複数の折れ線グラフをレンダリングする方法-JAVASCRIPT(DC.js)

  6. 6

    次のタイプのデータを使用してDC.jsで複数の折れ線グラフをレンダリングする方法-JAVASCRIPT(DC.js)

  7. 7

    dc.js-グラフの外側のグラフからマウスオーバー値を表示します

  8. 8

    dc.jsを使用して円グラフの中央に値を表示する方法

  9. 9

    Dc-サンバースト、dc-Menuslect、dc-非インタラクティブグラフ

  10. 10

    サーバーでクロスフィルターを使用してクライアント側でdc.jsを使用する

  11. 11

    dc.js散布図とelasticYの動作

  12. 12

    奇妙なLDAPフィルター(メンバー<==> CN = usera、OU = xxx、OU = xxx、DC = abc、DC = corp、DC = xyz、DC = com)

  13. 13

    棒グラフのdc.jsしきい値/カラーバンド

  14. 14

    dc.js-チャートグループのレンダリングをリッスンしています

  15. 15

    レンダーレットを使用したdc.jsチャートのバックグラウンドでのレンダリング

  16. 16

    レンダーレットを使用したdc.jsチャートのバックグラウンドでのレンダリング

  17. 17

    dc.js棒グラフをクリック可能ではなく、ホバー可能にする方法を教えてください。

  18. 18

    2つのチャートをオーバーレイするdc.js

  19. 19

    円グラフdc.jsの小数を削除します

  20. 20

    プライマリDCがダウンしているときにDCをフェイルオーバーする方法

  21. 21

    CrossfilterとDC.jsの平均

  22. 22

    ネストされたJSONでdc.jsを使用して棒グラフを作成する

  23. 23

    dc折れ線グラフは、クリックするとデータポイント情報をポップアップします

  24. 24

    dc.jsとクロスフィルターを使用した面グラフ

  25. 25

    既存のフィルターを使用してすべてのdc.jsチャートを再描画します

  26. 26

    DCで精度を失う

  27. 27

    DCで精度を失う

  28. 28

    dc.jsを使用して円グラフの外部ラベルが重ならないようにする方法

  29. 29

    dc.js pieChart slice move

ホットタグ

アーカイブ