Was geschieht, ist chart.js multipliziert die Größe der Leinwand, wenn sie als Versuch, sie mit CSS zurückzuführen, zu skalieren, wobei der Zweck dazu besteht, Diagramme mit höherer Auflösung für Hoch-DPI-Geräte bereitzustellen.
Das Problem ist, dass es nicht klar ist, dass es dies bereits getan hat. Wenn es also aufeinanderfolgende Zeiten bezeichnet wird, multipliziert es die bereits (verdoppelte oder was auch immer) Größe wieder, bis die Dinge zu brechen beginnen. (Was tatsächlich passiert, ist zu überprüfen Attribut zum Verwalten der gleichen Größe auf der Seite.)
Wenn Sie es beispielsweise einmal ausführen und Ihre Leinwandbreite und -höhe auf 300 eingestellt sind, setzt sie sie auf 600 und ändert dann das Style -Attribut auf 300 ... aber wenn Sie es erneut ausführen, sieht es, dass die DOM -Breite und die Höhe der DOM -Breite und -höhe festgelegt werden. sind 600 (überprüfen Sie die andere Antwort auf diese Frage, um zu sehen, warum) und setzt sie dann auf 1200 und die CSS -Breite und Höhe auf 600.
Nicht die eleganteste Lösung, aber ich habe dieses Problem gelöst und gleich
var ctx = document.getElementById("canvas").getContext("2d");
ctx.canvas.width = 300;
ctx.canvas.height = 300;
var myDoughnut = new Chart(ctx).Doughnut(doughnutData);