J'essaie d'échanger à chaud les types de graphique en fonction des modifications apportées à la zone de sélection. Si les données doivent être mises à jour, cela change.
Ainsi, par exemple, lors du chargement de la page, je crée un graphique comme celui-ci:
var config = {
type: 'line',
data: {
labels: this.labels,
datasets: [{
label: 'Some Label',
data: this.values
}]
},
options: {
responsive: true
}
}
var context = document.getElementById('canvas').getContext('2d');
window.mychart = new Chart(context, config);
Mais ensuite, je change la liste déroulante en un graphique à barres. J'ai testé les données avec un graphique à barres au chargement de la page, et cela a très bien fonctionné.
Voici comment j'essaie de changer le graphique.
window.mychart.destroy();
// chartType = 'bar'
config.type = chartType;
var context = document.getElementById('canvas').getContext('2d');
window.mychart = new Chart(context, config);
window.mychart.update();
window.mychart.render();
Mais rien ne se passe. Le graphique en courbes reste. Comment changer dynamiquement le type de graphique? (Même si cela signifie détruire et recréer le canevas du graphique).
METTRE À JOUR
Notez qu'il semble détruire le graphique, mais continue à redessiner un graphique linéaire, même si je fais console.log(config.type);
et qu'il renvoie bar
, pas line
Voici un exemple de travail avec jsfiddle
Exemple de vue d'ensemble:
var temp = jQuery.extend(true, {}, config);
temp.type = 'bar'; // The new chart type
myChart = new Chart(ctx, temp);
Remarque: à l'aide de la version 2.0.1 de Chart.js
Chart.js modifie l'objet de configuration que vous transmettez. De ce fait, vous ne pouvez pas changer simplement 'config.type'. Vous pouvez aller dans l'objet modifié et tout changer pour le type que vous voulez, mais il est beaucoup plus facile de simplement sauvegarder l'objet config d'origine.
Juste pour ajouter que cela est maintenant corrigé dans la v.2.1.3, suivi de https://stackoverflow.com/users/239375/nathan
document.getElementById('changeToLine').onclick = function() {
myChart.destroy();
myChart = new Chart(ctx, {
type: 'line',
data: chartData
});
};
Confirmé corrigé dans la dernière version. Consultez http://codepen.io/anon/pen/ezJGPB et appuyez sur le bouton situé sous le graphique pour le changer de barre à graphique linéaire.
La solution de rechange peut être aussi simple que de créer les deux graphiques dans des éléments Div séparés. Ensuite, selon votre condition, faites-en une visible et cachez-en une autre dans le javascript. Cela devrait vous permettre de modifier le type de graphique correspondant à vos besoins.