2013-03-19 105 views
1

我有一个使用Highcharts和mySQL数据库的数据的工作图。现在我需要它来查看不同轴上的线条,以便更好地布置图表。将Highchart转换为多个y轴

这里是我的代码的jsfiddle与我的数据图表:

http://jsfiddle.net/petenaylor/tGfau/3/

(function($){ // encapsulate jQuery 

$(function() { 
var seriesOptions = [], 
    yAxisOptions = [], 
    seriesCounter = 0, 
    names = ['Electric', 'Oil', 'Gas'], 
    colors = Highcharts.getOptions().colors; 

$.each(names, function(i, name) { 

    $(function() { 

$.getJSON('http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?', function(data) { 
    // Create the chart 
    window.chart = new Highcharts.StockChart({ 
     chart : { 
      renderTo : 'container', 
      zoomType: 'x' 
     }, 

     rangeSelector : { 
      selected : 12 
     }, 

     title : { 
      text : 'Energy Prices' 
     }, 

     series : [{ 
      name : 'Electric', 

      <?php 
      $result = mysql_query (" SELECT * FROM energyprices ORDER BY id ASC") or die (mysql_error()); 
      while ($row = mysql_fetch_array($result)) { 
      extract($row); 
      $date = strtotime($row['pDate']); 
      $date = $date."000"; // convert from Unix timestamp to JavaScript time 
      $data1[] = "[$date, $electric]"; 
      } 
      ?> 


      data: [<?php echo join($data1, ',') ?>], 
      tooltip: { 
       valueDecimals: 2 
      } 
     },{ 
      name : 'Oil', 


      <?php 
      $result = mysql_query (" SELECT * FROM energyprices ORDER BY id ASC") or die (mysql_error()); 
      while ($row = mysql_fetch_array($result)) { 
      extract($row); 
      $date = strtotime($row['pDate']); 
      $date = $date."000"; // convert from Unix timestamp to JavaScript time 
      $data2[] = "[$date, $oil]"; 
      } 
      ?> 


      data: [<?php echo join($data2, ',') ?>], 
      tooltip: { 
       valueDecimals: 2 
      } 
     },{ 
      name : 'Gas', 


      <?php 
      $result = mysql_query (" SELECT * FROM energyprices ORDER BY id ASC") or die (mysql_error()); 
      while ($row = mysql_fetch_array($result)) { 
      extract($row); 
      $date = strtotime($row['pDate']); 
      $date = $date."000"; // convert from Unix timestamp to JavaScript time 
      $data3[] = "[$date, $gas]"; 
      } 
      ?> 


      data: [<?php echo join($data3, ',') ?>], 
      tooltip: { 
       valueDecimals: 2 
      } 
     }] 
    }); 
}); 

}); 

}); 



// create the chart when all data is loaded 
function createChart() { 

    chart = new Highcharts.StockChart({ 
     chart: { 
      renderTo: 'container' 
     }, 

     rangeSelector: { 
      selected: 4 
     }, 









     /*yAxis: { 
      labels: { 
       formatter: function() { 
        return (this.value > 0 ? '+' : '') + this.value + '%'; 
       } 
      }, 

      plotLines: [{ 
       value: 0, 
       width: 2, 
       color: 'silver' 
      }] 
     },*/ 



     yAxis: [{ // Primary yAxis 
      labels: { 
       formatter: function() { 
        return (this.value > 0 ? '+' : '') + this.value + '%'; 
       }, 
       style: { 
        color: '#89A54E' 
       } 
      }, 
      title: { 
       text: 'Electric', 
       style: { 
        color: '#89A54E' 
       } 
      }, 
      opposite: true 

     }, { // Secondary yAxis 
      gridLineWidth: 0, 
      title: { 
       text: 'Oil', 
       style: { 
        color: '#4572A7' 
       } 
      }, 
      labels: { 
       formatter: function() { 
        return this.value; 
       }, 
       style: { 
        color: '#4572A7' 
       } 
      } 

     }, { // Tertiary yAxis 
      gridLineWidth: 0, 
      title: { 
       text: 'Gas', 
       style: { 
        color: '#AA4643' 
       } 
      }, 
      labels: { 
       formatter: function() { 
        return this.value; 
       }, 
       style: { 
        color: '#AA4643' 
       } 
      }, 
      opposite: true 
     }], 









     plotOptions: { 
      series: { 
       compare: 'percent' 
      } 
     }, 

     tooltip: { 
      pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b> ({point.change}%)<br/>', 
      valueDecimals: 2 
     }, 

     series: seriesOptions 
    }); 
} 

}); 
})(jQuery); 

正如你可以看到这个作品,因为它应该,但是,我需要这个像下面的例子来发挥作用。我必须让y轴显示值并且缩放必须正常工作。我试图使用我自己的数据来调整下面的代码,但是我得到的问题没有响应脚本。我认为我的数据可能太多,图表无法处理。

http://jsfiddle.net/petenaylor/c73u5/5/

$(function() { 
var chart; 
$(document).ready(function() { 
    chart = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'container', 
      zoomType: 'xy' 
     }, 
     title: { 
      text: 'Average Monthly Weather Data for Tokyo' 
     }, 
     subtitle: { 
      text: 'Source: WorldClimate.com' 
     }, 
     xAxis: [{ 
      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
       'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
     }], 
     yAxis: [{ // Primary yAxis 
      labels: { 
       formatter: function() { 
        return this.value +'°C'; 
       }, 
       style: { 
        color: '#89A54E' 
       } 
      }, 
      title: { 
       text: 'Temperature', 
       style: { 
        color: '#89A54E' 
       } 
      }, 
      opposite: true 

     }, { // Secondary yAxis 
      gridLineWidth: 0, 
      title: { 
       text: 'Rainfall', 
       style: { 
        color: '#4572A7' 
       } 
      }, 
      labels: { 
       formatter: function() { 
        return this.value +' mm'; 
       }, 
       style: { 
        color: '#4572A7' 
       } 
      } 

     }, { // Tertiary yAxis 
      gridLineWidth: 0, 
      title: { 
       text: 'Sea-Level Pressure', 
       style: { 
        color: '#AA4643' 
       } 
      }, 
      labels: { 
       formatter: function() { 
        return this.value +' mb'; 
       }, 
       style: { 
        color: '#AA4643' 
       } 
      }, 
      opposite: true 
     }], 
     tooltip: { 
      formatter: function() { 
       var unit = { 
        'Rainfall': 'mm', 
        'Temperature': '°C', 
        'Sea-Level Pressure': 'mb' 
       }[this.series.name]; 

       return ''+ 
        this.x +': '+ this.y +' '+ unit; 
      } 
     }, 
     legend: { 
      layout: 'vertical', 
      align: 'left', 
      x: 120, 
      verticalAlign: 'top', 
      y: 80, 
      floating: true, 
      backgroundColor: '#FFFFFF' 
     }, 
     series: [{ 
      name: 'Rainfall', 
      color: '#4572A7', 
      type: 'column', 
      yAxis: 1, 
      data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] 

     }, { 
      name: 'Sea-Level Pressure', 
      type: 'spline', 
      color: '#AA4643', 
      yAxis: 2, 
      data: [1016, 1016, 1015.9, 1015.5, 1012.3, 1009.5, 1009.6, 1010.2, 1013.1, 1016.9, 1018.2, 1016.7], 
      marker: { 
       enabled: false 
      }, 
      dashStyle: 'shortdot' 

     }, { 
      name: 'Temperature', 
      color: '#89A54E', 
      type: 'spline', 
      data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6] 
     }] 
    }); 
}); 

}); 

谁能帮助?

非常感谢

皮特

回答

2

我想这是你想要的东西:http://jsfiddle.net/mxrhS/

我做到了通过定义3个Y轴,然后设置每个系列使用不同的y轴:

yAxis:[{opposite:false},{opposite:true},{opposite:true,offset:50}], 

and

series: [{ 
         name: 'Electric', 
         yAxis:0, 
+0

太棒了!感谢您的帮助。 – 2013-03-20 09:51:52