2016-05-17 5 views
0

Ich erstelle ein Liniendiagramm, das Daten aus verschiedenen JSON-Dateien enthält, und die unten stehenden Codes funktionieren, aber ich würde gerne wissen, wie ich diese JSON-Daten von verschiedenen Apis zu einem von a gruppieren kann für jede Schleife, um die Codes zu verkürzen.HighChart mit multiple JSON api data

//consider the vol1- vol10 looks like var vol1 = ['1123', '1234','5436']; 
//because i have other method the convert it to an arrray 
//Xvol1 is just something like Xvol1=["Jan","Feb","Mar"] 

     $('#trendChart').highcharts({ 
     chart: { 
      type: 'spline' 
     }, 
     title: { 
      text: false 
     }, 
     xAxis: {   
      categories : Xvol1 
     }, 
     yAxis: { 
      title: { 
       text: 'Volume', 
      }, 
      min: 0 
     }, 

     plotOptions: { 
      spline: { 
       marker: { 
        enabled: true 
       } 
      } 
     }, 

     series: [{ 
      name: $(".profileName0").html(), 

      data: vol1 
      }, 
      { 
      name: $(".profileName1").html(), 

      data: vol2 
      }, 
      { 
      name: $(".profileName3").html(), 

      data: vol3 
      }, 
      { 
      name: $(".profileName2").html(), 

      data: vol4 
      }, 

      { 
      name: $(".profileName4").html(), 

      data: vol5 
      }, 
      { 
      name: $(".profileName5").html(), 
      data: vol6 
      }, 
      { 
      name: $(".profileName6").html(), 

      data: vol7 
      }, 
      { 
      name: $(".profileName7").html(), 
      data: vol8 
      }, 
      { 
      name: $(".profileName8").html(), 
      data: vol9 
      }, 
      { 
      name: $(".profileName9").html(), 
      data: vol10 
      }, 

] 
    }); 

UPDATE 1: Ich habe versucht, aber es scheint nicht, wie zu arbeiten.

var series = []; 
         for(i = 0; i < 10; i++){ 
         series.push({name: $('.profileName'+i+'"').html(),, data: vol[i]}); 
         } 


         $('#trendChart').highcharts({ 
         chart: { 
          type: 'spline' 
         }, 
         title: { 
          text: false 
         }, 
         xAxis: {   
          categories : Xvol1 
         }, 
         yAxis: { 
          title: { 
           text: 'Volume', 
          }, 
          min: 0 
         }, 

         plotOptions: { 
          spline: { 
           marker: { 
            enabled: true 
           } 
          } 
         }, 

         series: [series] 
           }); 
          }); 

Nachdem ich die Daten durch eine for-Schleife erfolgreich generieren, ich bin jetzt kämpfen, wie die Daten zu aktualisieren, habe ich versucht, es zu aktualisieren, mit setData() aber scheinen es so Anpassung braucht, um zu funktionieren.

     var seriesData = [vol1, vol2, vol3, vol4, vol5, vol6 , vol7, vol8, vol9, vol10]; // add all the vols. I have used 2 for example 


         var series = []; 
         for(i = 0; i < 5; i++){ 
         series.push({name: names[i], data: seriesData[i]}); 
         } 

         var trendChart12w = $('#trendChart').highcharts(); 
         trendChart12w.series[0].setData(series); 

Lösung:

var dataCounting = $(".DataCount").last().html(); 
         var seriesData = [vol1, vol2, vol3, vol4, vol5, vol6 , vol7, vol8, vol9, vol10]; // add all the vols. I have used 2 for example 

         var trendChart1y = $('#trendChart').highcharts(); 
         trendChart1y.xAxis[0].setCategories(Xvol1); 

         for(i = 0; i < dataCounting; i++){ 
         trendChart1y.series[i].setData(seriesData[i]); 
         } 
+0

Wo ist die 'volX' Daten kommen? Kannst du es zu einem Array machen? – apokryfos

+0

volX ist nur ein weiteres Array() für die Anzeige Kategorie auf xAxis – anson920520

+0

Ich habe es nicht richtig ausgedrückt 'volX' ist eine generische Art zu sagen 'vol1, vol2, vol3 ....' – apokryfos

Antwort

2

können Sie ein Array mit den Namen wie var names = [all the names] und eine Reihe von Daten wie var seriesData = [vol1, vol2...] Und dann tun

var series = []; 
for(i = 0; i < names.length; i++){ 
series.push({name: names[i], data: seriesData[i]}); 
} 

Und dann setzen Sie diese als Kartenserie.

UPDATE Tun Sie dies außerhalb Ihres Diagramms.

var seriesData = [vol1, vol2]; // add all the vols. I have used 2 for example 
var names = [$(".profileName0").html(), $(".profileName1").html()] // add all names 

var series = []; 
for(i = 0; i < names.length; i++){ 
series.push({name: names[i], data: seriesData[i]}); 
} 

Und dann in Ihrem Diagramm, in dem Sie die Serie eingestellt, tun nur series: series

+0

kann ich Ihre Methode verwenden, um die zu aktualisieren Daten auch? – anson920520

+0

Und können Sie bitte ein Beispiel im Detail machen? Ich bin ziemlich neu in Highchart, erkläre ich die For-Schleife außerhalb des Diagramms? – anson920520

+0

Ja, Sie können auch für die Aktualisierung verwenden. Rufen Sie für Serien (in Schleife) das [series.update()] (http://api.highcharts.com/highcharts#Series.update) auf. –