javascript - Highcharts - 同步热图

标签 javascript jquery html css highcharts

假设我们有两个 Highcharts - 热图(将来可能会更多)。像下面的 jsfiddle 一样检查它。

http://jsfiddle.net/xzq5bzy5/1/

<div id="container" style="height: 400px; min-width: 310px; max-width: 800px; margin: 0 auto"></div>    
<div id="container2" style="height: 400px; min-width: 310px; max-width: 800px; margin: 0 auto"></div>

如果我将鼠标悬停在第一个高位图表的第一个单元格上,我想要什么。它应该同时悬停在第二个高位图表的第一个单元格上,并且两者都应该在各自的工具提示中显示数据。

我试图搜索,但我没有找到任何东西。让我知道是否需要添加更多信息。

最佳答案

这是一个使用 synchronised-charts highchars 演示的基本示例:

    /*
    The purpose of this demo is to demonstrate how multiple charts on the same page can be linked
    through DOM and Highcharts events and API methods. It takes a standard Highcharts config with a
    small variation for each data set, and a mouse/touch event handler to bind the charts together.
    */



    /**
     * In order to synchronize tooltips and crosshairs, override the
     * built-in events with handlers defined on the parent element.
     */
    $('#container').bind('mousemove touchmove touchstart', function(e) {
      var chart,
        point,
        i,
        event;

      for (i = 0; i < Highcharts.charts.length; i = i + 1) {
        chart = Highcharts.charts[i];
        event = chart.pointer.normalize(e.originalEvent); // Find coordinates within the chart
        point = chart.series[0].searchPoint(event, true); // Get the hovered point

        if (point) {
          point.highlight(e);
        }
      }
    });
    /**
     * Override the reset function, we don't need to hide the tooltips and crosshairs.
     */
    Highcharts.Pointer.prototype.reset = function() {
      return undefined;
    };

    /**
     * Highlight a point by showing tooltip, setting hover state and draw crosshair
     */
    Highcharts.Point.prototype.highlight = function(event) {
      this.onMouseOver(); // Show the hover marker
      this.series.chart.tooltip.refresh(this); // Show the tooltip
      this.series.chart.xAxis[0].drawCrosshair(event, this); // Show the crosshair
    };

    for (var i = 0; i < 2; ++i) {
      $('<div class="chart">')
        .appendTo('#container')
        .highcharts({

          chart: {
            type: 'heatmap',
            marginTop: 40,
            marginBottom: 80,
            plotBorderWidth: 1
          },


          title: {
            text: 'Sales for Feb'
          },

          xAxis: {
            categories: ['Alexander', 'Marie', 'Maximilian', 'Sophia', 'Lukas', 'Maria', 'Leon', 'Anna', 'Tim', 'Laura']
          },

          yAxis: {
            categories: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
            title: null
          },

          colorAxis: {
            min: 0,
            minColor: '#FFFFFF',
            maxColor: Highcharts.getOptions().colors[0]
          },

          legend: {
            align: 'right',
            layout: 'vertical',
            margin: 0,
            verticalAlign: 'top',
            y: 25,
            symbolHeight: 280
          },

          tooltip: {
            formatter: function() {
              return '<b>' + this.series.xAxis.categories[this.point.x] + '</b> sold <br><b>' +
                this.point.value + '</b> items on <br><b>' + this.series.yAxis.categories[this.point.y] + '</b>';
            }
          },

          series: [{
            name: 'Sales per employee',
            borderWidth: 1,
            data: [
              [0, 0, 10],
              [0, 1, 19],
              [0, 2, 8],
              [0, 3, 24],
              [0, 4, 67],
              [1, 0, 92],
              [1, 1, 58],
              [1, 2, 78],
              [1, 3, 117],
              [1, 4, 48],
              [2, 0, 35],
              [2, 1, 15],
              [2, 2, 123],
              [2, 3, 64],
              [2, 4, 52],
              [3, 0, 72],
              [3, 1, 132],
              [3, 2, 114],
              [3, 3, 19],
              [3, 4, 16],
              [4, 0, 38],
              [4, 1, 5],
              [4, 2, 8],
              [4, 3, 117],
              [4, 4, 115],
              [5, 0, 88],
              [5, 1, 32],
              [5, 2, 12],
              [5, 3, 6],
              [5, 4, 120],
              [6, 0, 13],
              [6, 1, 44],
              [6, 2, 88],
              [6, 3, 98],
              [6, 4, 96],
              [7, 0, 31],
              [7, 1, 1],
              [7, 2, 82],
              [7, 3, 32],
              [7, 4, 30],
              [8, 0, 85],
              [8, 1, 97],
              [8, 2, 123],
              [8, 3, 64],
              [8, 4, 84],
              [9, 0, 47],
              [9, 1, 114],
              [9, 2, 31],
              [9, 3, 48],
              [9, 4, 91]
            ],
            dataLabels: {
              enabled: true,
              color: '#000000'
            }
          }]
        })
    }

实例: http://jsfiddle.net/atkf70cv/

关于javascript - Highcharts - 同步热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43383844/

相关文章:

html - 表从容器中取出

javascript - 数组行为困惑

javascript - 字符串转换为数字和 +、-、* 和/- Javascript 方程计算器

javascript - 使用 jQuery 从 asp.net 响应中检索 JSON 值

php - Facebook 点赞和 Twitter 转发按钮 - 雅虎实现

javascript - 许多同名按钮

javascript - React/Redux 组件,需要根据下拉选择填充一定数量的字段

javascript - D3js 更新路径解析错误将暂时中断路径

jquery - 学校 CMS

javascript - JQuery 循环遍历动态元素并获取数据值