highcharts - Highstock 的同步图表示例因 "Cannot read property ' 类别“未定义”而崩溃

标签 highcharts

我想要“同步图表”示例的功能,但需要使用 Highstock。但是当尝试完成此操作时,我得到“highstock.src.js:9991 Uncaught TypeError: Cannot read property 'category' of undefined”

这也直接适用于示例:http://www.highcharts.com/demo/synchronized-charts转换为 Highstock 时不起作用:http://jsfiddle.net/9gq47g0w/

(由于 StackOverflow 要求我随 fiddle 一起发布一些代码,这里来自 Highstock,注意它崩溃的地方 **):

    /**
     * Refresh the tooltip's text and position.
     * @param {Object} point
     */
    refresh: function (point, mouseEvent) {
        ...
        // shared tooltip, array is sent over
        if (shared && !(point.series && point.series.noSharedTooltip)) {
            ...
            textConfig = {
                x: ** point[0].category, ** <- here!
                y: point[0].y
            };
           ...
        }
        ...
    },

最佳答案

在这里您可以找到同步高库存图表的示例: http://jsfiddle.net/vw77cooj/20/

此示例使用自定义函数来同步图表上的极值和工具提示:

  function syncExtremes(e) {
    var thisChart = this.chart;

    if (e.trigger !== 'syncExtremes') { // Prevent feedback loop
      Highcharts.each(Highcharts.charts, function(chart) {
        if (chart !== thisChart) {
          if (chart.xAxis[0].setExtremes) { // It is null while updating
            chart.xAxis[0].setExtremes(e.min, e.max, undefined, false, {
              trigger: 'syncExtremes'
            });
          }
        }
      });
    }
  }

$('#container').bind('mousemove touchmove touchstart', function(e) {
  Highcharts.each(Highcharts.charts, function(chart) {
    event = chart.pointer.normalize(e.originalEvent);
    point = chart.series[0].searchPoint(event, true);

    if (point) {
      point.onMouseOver(); // Show the hover marker
      chart.tooltip.refresh(point); // Show the tooltip
      chart.xAxis[0].drawCrosshair(event, point); // Show the crosshair
    }
  });
});

如果图表上有多个系列,您可以更改负责同步工具提示的函数:

  function syncTooltip(container, p) {
    var i = 0,
      j = 0,
      data,
      series,
      points = [];
    for (; i < chartSummary.length; i++) {
      if (container.id != chartSummary[i].container.id) {
        series = chartSummary[i].series
        Highcharts.each(series, function(s) {
          Highcharts.each(s.data, function(point) {
            if (point.x === p && point.series.yAxis.options.index !== 1) {
              points.push(point)
            }
          })
        });
        chartSummary[i].tooltip.refresh(points);
      }
    };
  }

http://jsfiddle.net/ZArZM/316/

关于highcharts - Highstock 的同步图表示例因 "Cannot read property ' 类别“未定义”而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39095040/

相关文章:

javascript - 访问 Rails 应用程序中的 post 方法后的复选框行为

javascript - highcharts:动态定义饼图中的颜色

graph - Highcharts -指定堆积时间序列的顺序

highcharts - 如何将背景图像(图案)添加到 highchart 柱形图?

javascript - 解决方案: Manage space between group columns in highchart

javascript - Highcharts 图例错误 : "typeError: a.legendItem.bBox is undefined"

javascript - Xaxis 数据按降序提供给 highcharts 但 xaxis 仍然按升序出现

javascript - Highcharts 系列显示 'column' 和 'line' 图表的不同数据

Highcharts 如何更改 x 轴选项

javascript - 减少 Highcharts 中列之间的空间