L'ajout d'une série dynamiquement avec HighCharts Graphiques Boursiers
J'ai le code suivant: http://jsfiddle.net/maniator/vTjW8/
var createChartTemplate = function() {
return {
chart: new Highcharts.StockChart({
chart: {
renderTo: 'container'
},
series: []
}),
addSeries: function(name) {
this.chart.addSeries({
name: name,
data: [],
id: Math.floor(Math.random()*1000)
});
},
addPoint: function(data, series) {
var seriesIndex = this.seriesExists(series);
if (!(seriesIndex === false)) {
this.chart.series[seriesIndex].addPoint(data, false);
}
this.chart.redraw();
},
seriesExists: function(series) {
var seriesIndex = false;
$.each(this.chart.series, function(index, item) {
if ($.trim(item.name) == $.trim(series)) {
seriesIndex = index;
return false;
}
});
return seriesIndex;
}
}
}
$(function() {
var data = usdeur.splice(0, 700);
var chart = createChartTemplate();
chart.addSeries("New Series");
for (var i = 0; i < data.length; i++) {
chart.addPoint(data[i], "New Series");
}
});
Il a l'erreur suivante dans la console:
Uncaught TypeError: Cannot read property 'options' undefined
Ce code fonctionne très bien si elle est normale highchart, mais pour quelque raison il ne fonctionne pas avec un HighStock graphique.
Comment puis-je faire en sorte qu'il fonctionne avec le type de graphique que j'ai besoin?
Mise à jour:
Je découvre une sorte de chemin autour de l'obtention de la 1ère série de manière dynamique, mais lorsque j'essaie d'ajouter une deuxième série a une erreur de:
Uncaught TypeError: Cannot read property 'piles' undefined
Violon: http://jsfiddle.net/maniator/V5WAJ/
- vous n'avez donc jamais comprendre comment démarrer un highstock avec des données vides? Je suis confronté problème similaire, c'est à dire le besoin d'ajouter des données dynamiquement le tableau après le graphique a été créé.
- J'avais besoin de futz avec le code.... :-\ très très hacky. En gros quand j'avais besoin d'une nouvelle série, j'ai recréé l'ensemble du graphique à nouveau avec de nouvelles séries de données.....
- J'ai trouvé une solution pour mes besoins. Ne sais pas si cela s'applique à votre problème (et il est probablement trop tard), mais j'ai posté une réponse ci-dessous pour les autres.
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la création du graphique avec un vide de la série, d'où l'erreur. Lorsque cette ligne de code s'exécute, c'est l'initialisation de la Highchart immédiatement, avant que l'
series
option a été définie.J'ai eu une meilleure expérience avec Highcharts quand j'ai construit la matrice de stockage de série abord, puis l'ajouter dans les options du constructeur dans la dernière étape.
Spécifiques à votre exemple, l'
usdeur.js
fichier comprend déjà une initialisation de tableau de données. Vous avez simplement besoin de passer dans le tableau d'options. Votre jsfiddle peut être simplifiée à cette.HighCharts
il fonctionne parfaitement...J'ai trouvé une solution de contournement. Mon cas d'utilisation était de tracer les valeurs au fil du temps, de sorte que la première valeur que j'étais en ajoutant le tableau a été une paire de horodatage valide avec un
null
pour les données:Alors à chaque fois que de nouvelles valeurs ont dû être tracée juste d'ajouter simplement comme:
Cela peut être testé ici, il suffit de remplacer la définition d'origine de la
series
avec l'un de ici.De la HighStock de Référence de l'API sur addSeries:
C'est-à-dire, si vous utilisez le Navigateur, vous devez commencer avec au moins un de la série. Selon la même Référence de l'API, le Navigateur affiche par défaut.
options
et, partant, n'était pas de l'initialisation de laseries
J'ai trouvé que vous pouvez utiliser le code suivant dans l'dynamiquement en fonction appelée pour contourner la highstock option.série[0] = null problème
J'ai atteint l'ajout de temps de la série de façon dynamique comme suit:
la partie HTML, rien de compliqué, c'est ici:
et la partie javascript:
add_timeseries()
fonction fait le travail réel, il remplit la série dans la fente de donnéeshttps://jsfiddle.net/muatik2/vxym5xx5/6/
Vous pouvez créer le modèle de première et ajouter la série plus tard. Mais une fois que vous avez ajouté au moins une série, vous ne pouvez pas supprimer le
highcharts-navigator-series
(auto-générée) à partir d'un HighStock graphique. Si vous souhaitez supprimer toutes les séries, vous pouvez utiliser le code ci-dessous:Cela permettra d'éliminer toutes les séries sauf le navigateur de la série. Vous pouvez ensuite la possibilité d'ajouter de nouvelles séries à votre graphique.