2016-08-23 1 views
2

Я хочу использовать функциональность« Синхронизированных диаграмм », но с помощью Highstock. Но, пытаясь выполнить это, я получаю «highstock.src.js: 9991 Uncaught TypeError: не могу прочитать свойство« категория »неопределенного»Пример синхронизированных диаграмм с ошибками Highstock с категорией «Невозможно прочитать свойство« неопределенного »

Это также справедливо для примера: http://www.highcharts.com/demo/synchronized-charts не работает при преобразовании в Highstock : http://jsfiddle.net/9gq47g0w/

(с StackOverflow требует, чтобы я отправил код вместе с скрипкой, вот от 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 
      }; 
      ... 
     } 
     ... 
    }, 
+0

Я думаю, что этот пример может помочь вам с вашей проблемой: http://jsfiddle.net/ZArZM/20/ –

+0

Вы также можете увидеть этот пример: http://jsfiddle.net/vw77cooj/20/ с аналогичной функциональностью с тем, что вы хотели бы достичь –

+0

@ GrzegorzBlachliński: http://jsfiddle.net/ZArZM/20 - Работает для одной серии и для всплывающей подсказки, но он не работает для двух серий. Отсутствует маркер: http://jsfiddle.net/ZArZM/315/ – HNygard

ответ

3

здесь вы можете найти пример синхронизированы диаграммы высот: 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/

+0

является '.searchPoint' устаревшим? Я не могу найти документы для него –

+1

searchPoint является внутренним методом Highcharts, и именно по этой причине он не описан в API Highcharts. –

Смежные вопросы