Breite und Höhe einstellen


85

Ich probiere den Beispielcode für Chart.js aus , der in den Dokumenten angegeben ist .

Breite und Höhe werden inline auf dem Canvas-Element mit 400px / 400px angegeben.

Beim Rendern des Diagramms wird es jedoch auf die volle Seitenbreite vergrößert und das rechte Ende abgeschnitten.

Siehe Beispiel

Wie / wo soll ich die Breite / Höhe des Diagramms steuern?

This is some bogus text because SO prohibits linking to Codepen otherwise.

Antworten:


89

Sie können die Breite des Canvas-Stils überschreiben! Wichtig ...

canvas{

  width:1000px !important;
  height:600px !important;

}

ebenfalls

Geben Sie die responsive:true,Eigenschaft unter Optionen an.

options: {
    responsive: true,
    maintainAspectRatio: false,
    scales: {
        yAxes: [{
            ticks: {
                beginAtZero:true
            }
        }]
    }
}

Update unter Optionen hinzugefügt: maintainAspectRatio: false,

Link: http://codepen.io/theConstructor/pen/KMpqvo


11
Vielen Dank, Sie maintainAspectRatio: falsehaben das Diagramm sichtbar gemacht. Aber immer noch die rechte Seite abschneiden. Wenn ich diese Art von Problemen bereits mit ihrem eigenen grundlegenden Beispielcode treffe, frage ich mich, ob chart.js eine gute Wahl ist. (Die rechte Seite ist noch abgeschnitten ...)
Fellow Stranger

Damit ist das Problem der Diagrammgröße gelöst. Das Diagramm wurde nicht entsprechend skaliert. Gibt es eine Möglichkeit, die Diagrammgröße in Chart.js festzulegen?
Firix

7
Es stellt sich heraus, dass Sie die Reaktion deaktivieren müssen, damit das Diagramm den angegebenen Größen entspricht. Schade, dass es keinen Weg gibt, es zu kontrollieren und die Reaktionsfähigkeit aufrechtzuerhalten ...
Firix

2
Vielen Dank. Ihr maintainAspectRatiohilft mir wirklich.
Arsman Ahmad

Die Verwendung von "! Important" ist nicht der richtige Weg, um dies zu lösen, obwohl es funktioniert. Die @ Nicolas-Lösung unter "Einwickeln der Zeichenfläche in ein Div" ist eine bessere Möglichkeit, da wir die Größe der Zeichenfläche so steuern können, wie wir es möchten.
Abhishek Boorugu

52

Sie können das Diagramm auch einfach mit einem Container umgeben (laut offiziellem Dokument http://www.chartjs.org/docs/latest/general/responsive.html#important-note ).

<div class="chart-container">
    <canvas id="myCanvas"></canvas>
</div>

CSS

.chart-container {
    width: 1000px;
    height:600px
}

und mit Optionen

responsive:true
maintainAspectRatio: false

1
Das funktioniert. Der Schlüssel hier ist, ein äußeres Div zu verwenden und die Breite und Höhe auf diesem und nicht auf dem Canvas-Element festzulegen.
John Doherty

Damit dies funktioniert, sollte der Kartencontainer relativ positioniert sein.
Sanju

funktioniert für mich aber nur mit !importantin Angular Projekt
29ртур Гудиев

22

In meinem Fall responsive: falselöste das Übergeben von Optionen das Problem. Ich bin mir nicht sicher, warum jeder Ihnen sagt, dass Sie das Gegenteil tun sollen, zumal true die Standardeinstellung ist.


1
Hier gilt das gleiche. Durch die Einstellung wurde responsive: truedas Erscheinungsbild des Diagramms vollständig verzerrt.
Paul

funktioniert für mich aber nur mit !importantin meinem Angular Projekt
Артур Гудиев

2

Funktioniert auch bei mir

responsive:true
maintainAspectRatio: false


<div class="row">
        <div class="col-xs-12">
            <canvas id="mycanvas" width="500" height="300"></canvas>
        </div>
    </div>

Vielen Dank


2

Ich kann nicht glauben, dass niemand über die Verwendung eines relativen übergeordneten Elements gesprochen hat.

Code:

<div class="chart-container" style="position: relative; height:40vh; width:80vw">
  <canvas id="chart"></canvas>
</div>

Quellen: Offizielle Dokumentation


0

Nicht oben erwähnt, aber die Verwendung von max-widthoder max-heightauf dem Canvas-Element ist ebenfalls möglich.


0

Das Folgende hat bei mir funktioniert - aber vergessen Sie nicht, dies in den Parameter "Optionen" aufzunehmen.

var myChart = new Chart(ctx, {
type: 'line',
data: data,
options: {
    maintainAspectRatio: false,
    responsive:true,
    scales: {
        yAxes: [{
            ticks: {
                beginAtZero: true
            }
        }]
    }
}
});

0

Dies hat in meinem Fall geholfen:

options: {
    responsive: true,
    scales: {
        yAxes: [{
            display: true,
            ticks: {
                min:0,
                max:100
            }
        }]
    }
}

-3

Verwenden Sie dies, es funktioniert gut.

<canvas id="totalschart" style="height:400px;width: content-box;"></canvas>

und unter options,

responsive:true,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.