2017-09-27 1 views
0

j'ai un simple document JSON:Highcharts plus d'une série

[ { 
    "x" : "a", 
    "y" : 2 
}, { 
    "x" : "b", 
    "y" : 8 
}, { 
    "x" : "c", 
    "y" : 4 
}, { 
    "x" : "d", 
    "y" : 15 
} ] 

Je veux le visualiser en utilisant Highcharts ayant 4 séries. Je pourrais réussir, cependant, les données sont apparues seulement comme une série (voir la figure suivante).

enter image description here

Voici une partie du code:

var options = { 
. 
. 
. 
series: [{ }] 
}; 

. 
. 
. 
var data = JSON.parse(json); 

var seriesData = []; 
for (var i = 0; i < data.length; i++) { 
    seriesData.push([data[i].x, data[i].y]); 
    options.xAxis.categories.push(data[i].x); 
} 

    options.series[0].data = seriesData; 
    var chart = new Highcharts.Chart(options); 

mise à jour également la série

chart.series[0].update({ 
       type: type, 
      }); 

fonctionne très bien.

utilisant

options.series.push({name: data[i].x, data: [data[i].x, data[i].y]}); 

crée 4 séries, mais pas de façon appropriée et la mise à jour a également visualisé la série

chart.series[0].update({ 
      type: type, 
     }); 

ne fonctionne pas, par conséquent, je veux me concentrer dans la première méthode mentionnée.

des indices?

EDit: le code qui fonctionne en partie pour moi:

var options = { 
      chart: { 
       renderTo: 'container', 
       type: 'column' //default 

      }, 
      title: { 
       text: '' 
      }, 

      yAxis: { 
       title: { 
        enabled: true, 
        text: 'Count', 
        style: { 
         fontWeight: 'normal' 
        } 
       } 
      }, 

      xAxis: { 
       title: { 
        enabled: true, 
        text: '', 
        style: { 
         fontWeight: 'normal' 
        } 
       }, 
       categories: [], 
       crosshair: true 
      } , 

      plotOptions: { 
       pie: { 
        innerSize: 125, 
        depth: 80 
       }, 
       column: { 
        pointPadding: 0.2, 
        borderWidth: 0, 
        grouping: false 
       } 

      }, 
      series: [{ }] 
     }; 


// Set type 
$.each(['column', 'pie'], function (i, type) { 
    $('#' + type).click(function() { 


    chart.series[0].update({ 
        type: type 
     }); 

}); 



var data = get the data fom json file** 

var seriesData = []; 
for (var i = 0; i < data.length; i++) { 
    seriesData.push([data[i].x, data[i].y]); 
    options.xAxis.categories.push(data[i].x); 


} 

    options.series[0].data = seriesData; 
var chart = new Highcharts.Chart(options); 

    }); 

}); 

Répondre

0

Vous devez décider si vous voulez avoir 4 séries différentes et mettre à jour toutes les 4 séries à la fois ou vous voulez avoir une série d'alors construire par exemple légende sur votre propre.

Si vous souhaitez avoir 4 séries, définissez le groupement sur false, définissez les catégories xAxis et chaque point doit être mappé sur une série avec un point - le point.x doit avoir l'index de la série.

const series = data.map((point, x) => ({ name: point.x, data: [{ x, y: point.y }]})) 

const chart = Highcharts.chart('container', { 
    chart: { 
    type: 'column' 
    }, 
    plotOptions: { 
    column: { 
     grouping: false 
    } 
    }, 
    xAxis: { 
    categories: data.map(point => point.x) 
    }, 
    series: series 
}); 

Ensuite, vous pouvez mettre à jour toutes les 4 séries:

chart.series.forEach(series => series.update({ 
    type: series.type === 'column' ? 'scatter' : 'column' 
    }, false)) 

    chart.redraw() 

exemple: http://jsfiddle.net/pdjqrj5y/

+0

Merci. Malheureusement, je cours le script sous une plate-forme spéciale dans laquelle votre code ne fonctionne pas. J'ai téléchargé la même bibliothèque que vous avez mais sans succès. J'ai mis à jour ma question avec le code qui fonctionne pour moi. Peut-être que vous pouvez vérifier et me dire comment je peux avoir 4 séries pour le type de colonne. Pour la tarte, cela fonctionne bien. – StaOver

+1

Vous pouvez utiliser babel transpiler pour transpiler le code vers une ancienne version de ES qui fonctionnera dans un environnement plus ancien - collez le code ici https://babeljs.io/repl/ – morganfree

+0

Merci beaucoup maintenant il fonctionne. Cependant, quand j'ai utilisé "tarte" comme type je viens de voir le sérieux pas (seulement une couleur avec "tranche" étiquette). Dans mon code en fait "tarte", "zone", etc fonctionne bien. Astuces – StaOver