Das Charts.js-Diagramm wird nicht auf die Leinwandgröße skaliert
Lesezeit: 6 Minuten
Ich versuche, ein Diagramm mit Charts.js zu erstellen (das aktuelle ist nur ein wirklich einfaches Beispiel, das ich versuche, zum Laufen zu bringen, etwas aus der Chart.js-Dokumentation) und das Diagramm wird nicht auf die Größe von skaliert Leinwand, die ich gebe. Hier ist der gesamte relevante Code.
<div id="graph_2015" class ="stats_box">
<h4>Graph 2015</h4>
Text
<canvas id="myChart" width="200" height="200"></canvas>
</div>
Und schließlich habe ich in stats_tab.js den folgenden Code:
window.onload=function(){
var ctx = document.getElementById("myChart").getContext("2d");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: [1,2,3,4,5,6,7,8,9,10],
datasets: [
{
label: "My First dataset",
data: [1,2,3,2,1,2,3,4,5,4]
}
]
},
options: {
}
});
}
Das Diagramm wird gut angezeigt, aber es weigert sich, auf die Größe der Leinwand zu skalieren, die ich ihm gegeben habe. Es gibt auch kein CSS, das für eines der beteiligten Divs relevant ist. Die Inspektionsfunktion in Chrome lässt mich wissen, dass das endgültige Diagramm 676 x 676 statt der von mir angegebenen 200 x 200 ist. Nicht wirklich sicher, was los ist.
Vielen Dank!
Möglicherweise möchten Sie das Verhältnis Ihres Diagrammchecks auf stackoverflow.com/questions/40594025/… aktualisieren.
– Sylhare
14. Mai 2021 um 20:55 Uhr
Die Breiten- und Höheneigenschaften, die Sie für die Zeichenfläche festlegen, funktionieren nur, wenn der Reaktionsmodus von Chartjs auf „false“ gesetzt ist (was standardmäßig „true“ ist). Ändern Sie Ihre stats_tab.js in diese und es wird funktionieren.
window.onload=function(){
var ctx = document.getElementById("myChart").getContext("2d");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: [1,2,3,4,5,6,7,8,9,10],
datasets: [
{
label: "My First dataset",
data: [1,2,3,2,1,2,3,4,5,4]
}
]
},
options: {
responsive: false
}
});
}
Dadurch wird ein Diagramm mit einer festen Größe erstellt, mit der gleichen Größe auf jedem Bildschirm, was in mho nicht das ist, was Sie wollen. Besser ist die Einstellung maintainAspectRatio zu falseund responsive zu true. Dadurch wird zunächst versucht, Ihr Diagramm so zu skalieren, dass es den Abmessungen Ihrer Leinwand entspricht. Wenn die Leinwand nicht auf den Bildschirm passt, wird Ihr Diagramm neu skaliert, damit es auf die Seite passt.
– Kurt van den Branden
16. November 2018 um 15:00 Uhr
Diese Antwort sollte als genehmigt festgelegt werden.
– Rosamunde
17. August 2021 um 15:32 Uhr
Der wichtige Punkt ist: width und height Eigenschaften sind nicht die Größe in px, sondern das Verhältnis.
In diesem Beispiel ist es ein Verhältnis von 1:1. Wenn Ihr HTML-Contenair also 676 px breit ist, dann ist Ihr Diagramm 676 * 675 px groß
Das kann einige häufige Fehler erklären.
Sie können diese Funktion durch Einstellung deaktivieren maintainAspectRatio zu falsch.
du hast mich gerettet bruder!
– aletede91
23. Juli 2018 um 18:03 Uhr
Das hat mir sehr geholfen!
– Benutzer2662680
6. September 2018 um 19:12 Uhr
Meinen Tag gerettet! Ich habe alle möglichen Dinge getan, bevor ich diese Antwort gefunden habe
– Schatten
12. Juli 2020 um 7:55 Uhr
Stellen Sie in Ihren Optionen die maintainAspectRatio zu falseund responsive zu true. Dadurch wird zunächst versucht, Ihr Diagramm so zu skalieren, dass es den Abmessungen Ihrer Leinwand entspricht. Wenn die Leinwand nicht auf den Bildschirm passt, z. B. auf Mobilgeräten, wird Ihr Diagramm neu skaliert, um auf die Seite zu passen.
window.onload=function(){
var ctx = document.getElementById("myChart").getContext("2d");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: [1,2,3,4,5,6,7,8,9,10],
datasets: [
{
label: "My First dataset",
data: [1,2,3,2,1,2,3,4,5,4]
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
}
});
}
Dies ist die richtige Lösung für responsive Diagramme.
– Thirumal Sakthivel
24. Februar 2020 um 7:01 Uhr
Du hast mich gerettet, Kumpel
– Martins
9. Juli 2020 um 21:43 Uhr
@kurt-van-den-branden Ich habe ein Balkendiagramm mit responsive: true, das in einem Bootstrap-Modal öffnet. Wenn ich nicht benutze maintainAspectRatio: false das Diagramm ist zu groß und es geht aus dem Ansichtsfenster (nach unten), während ich es verwende maintainAspectRatio: false es wird dann zu dünn. Können Sie einen Hinweis auf eine Lösung geben, die immer auf etwa 80 der vertikalen Ansichtsfensterlänge passt? Vielen Dank
– Robert
27. September 2021 um 8:17 Uhr
@Robert – Geben Sie Ihrer Leinwand oder Ihrem Diagrammcontainer eine CSS-Höhe von 80 vh. canvas { height: 80vh; }
– Kurt van den Branden
30. September 2021 um 12:37 Uhr
@kurt-van-den-branden danke für den Hinweis, ich habe versucht, diesen Stil zu einigen der DIVs des Bootstrap-Modals hinzuzufügen, aber ohne Erfolg, können Sie freundlicherweise darauf hinweisen, wo dieser Stil hinzugefügt werden soll? Vielen Dank
– Robert
2. Oktober 2021 um 9:00 Uhr
Ryan Forte
Ich hatte genau das gleiche Problem, bei dem die Größe meines Diagramms nicht richtig geändert wurde. Um dieses Problem zu umgehen, habe ich zwei Dinge getan.
Stellen Sie den Canvas-Tag-Stil auf eine Breite und Höhe von 100 % ein. Dadurch wird sichergestellt, dass es immer zu 100 % in die Breite und Höhe des Behälters passt.
Für den Optionswert set responsive: true & MaintainAspectRatio: false. Dadurch wird sichergestellt, dass das Diagramm auf Größenänderungen reagiert, während das Seitenverhältnis ignoriert wird.
Wenn Sie jetzt die Größe Ihres Bildschirms ändern, sollte sich die Größe des Diagramms entsprechend ändern. Hinweis: Das Diagramm füllt jetzt die Größe seines Containers aus, sodass alles, was Sie Ihre Leinwand hineinlegen, die Größe dieses Containers ausfüllt.
Etwas spät zur Party, aber ich hatte viel mit diesem Problem zu kämpfen, besonders auf einer Seite mit mehreren Charts.
Dieser kleine Leckerbissen hat alles gelöst – meine Diagramme passen jetzt alle gut und passen ihre Größe genau an die Divs an, in denen sie sich befinden.
Fügen Sie dies zu Ihren Seitenstilen hinzu (Die 8px ist eine persönliche Präferenz. Ändern Sie sie bei Bedarf):
Möglicherweise möchten Sie das Verhältnis Ihres Diagrammchecks auf stackoverflow.com/questions/40594025/… aktualisieren.
– Sylhare
14. Mai 2021 um 20:55 Uhr