2016-06-01 18 views
3

が、私は同期のチャートを構築するが、水平方向に整列しようとしています、私はそれがHighcharts同期チャートは水平

http://www.highcharts.com/demo/synchronized-charts

に基づいた私は今、チャートが同期していない、アライメント水平を作っ

/* 
 
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. 
 
*/ 
 

 
$(function() { 
 

 
    /** 
 
    * 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 
 
    }; 
 

 
    /** 
 
    * Synchronize zooming through the setExtremes event handler. 
 
    */ 
 
    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' }); 
 
        } 
 
       } 
 
      }); 
 
     } 
 
    } 
 

 
    // Get the data. The contents of the data file can be viewed at 
 
    // https://github.com/highcharts/highcharts/blob/master/samples/data/activity.json 
 
    $.getJSON('https://www.highcharts.com/samples/data/jsonp.php?filename=activity.json&callback=?', function (activity) { 
 
     $.each(activity.datasets, function (i, dataset) { 
 

 
      // Add X values 
 
      dataset.data = Highcharts.map(dataset.data, function (val, j) { 
 
       return [activity.xData[j], val]; 
 
      }); 
 

 
      $('<div class="chart" style="width:200px;float:left;">') 
 
       .appendTo('#container') 
 
       .highcharts({ 
 
        chart: { 
 
         marginLeft: 40, // Keep all charts left aligned 
 
         spacingTop: 20, 
 
         spacingBottom: 20 
 
        }, 
 
        title: { 
 
         text: dataset.name, 
 
         align: 'left', 
 
         margin: 0, 
 
         x: 30 
 
        }, 
 
        credits: { 
 
         enabled: false 
 
        }, 
 
        legend: { 
 
         enabled: false 
 
        }, 
 
        xAxis: { 
 
         crosshair: true, 
 
         events: { 
 
          setExtremes: syncExtremes 
 
         }, 
 
         labels: { 
 
          format: '{value} km' 
 
         } 
 
        }, 
 
        yAxis: { 
 
         title: { 
 
          text: null 
 
         } 
 
        }, 
 
        tooltip: { 
 
         positioner: function() { 
 
          return { 
 
           x: this.chart.chartWidth - this.label.width, // right aligned 
 
           y: -1 // align to title 
 
          }; 
 
         }, 
 
         borderWidth: 0, 
 
         backgroundColor: 'none', 
 
         pointFormat: '{point.y}', 
 
         headerFormat: '', 
 
         shadow: false, 
 
         style: { 
 
          fontSize: '18px' 
 
         }, 
 
         valueDecimals: dataset.valueDecimals 
 
        }, 
 
        series: [{ 
 
         data: dataset.data, 
 
         name: dataset.name, 
 
         type: dataset.type, 
 
         color: Highcharts.getOptions().colors[i], 
 
         fillOpacity: 0.3, 
 
         tooltip: { 
 
          valueSuffix: ' ' + dataset.unit 
 
         } 
 
        }] 
 
       }); 
 
     }); 
 
    }); 
 
});
.chart { 
 
    
 
} 
 
</style> 
 
<!-- http://doc.jsfiddle.net/use/hacks.html#css-panel-hack --> 
 
<meta name="viewport" content="width=device-width, initial-scale=1" /> 
 
<style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://code.highcharts.com/highcharts.js"></script> 
 

 
<div id="container"></div>

くらいappricatedされるすべてのヘルプ、

ありがとうございます。

答えて

5

coordiantesを追加することにより、各チャートで発見された後、あなたはevent.chartXを編集することができます:

event.chartX = (event.chartX+600) % 200; 

は、各チャートは、幅の200pxを持っているので200によって負の値と%を避けるために600を追加します。 例:コードのhttp://jsfiddle.net/fzda6z8p/

関連部分:

$('#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 

     event.chartX = (event.chartX+600) % 200; 

     point = chart.series[0].searchPoint(event, true); // Get the hovered point 
     if (point) { 
      point.highlight(e); 
     } 
    } 
}); 
+0

ニースは... ...ありがとう:) –

関連する問題