Ich möchte mit Chart.js ein horizontales Balkendiagramm zeichnen, aber es skaliert das Diagramm weiter, anstatt die Höhe zu verwenden, die ich der Leinwand aus dem Skript zuweise.
Gibt es eine Möglichkeit, die Höhe des Diagramms im Skript festzulegen?
Siehe Geige: Jsfidle
HTML
<div class="graph">
<div class="chart-legend">
</div>
<div class="chart">
<canvas id="myChart"></canvas>
</div>
</div>
JavaScript
var ctx = $('#myChart');
ctx.height(500);
var myChart = new Chart(ctx, {
type: 'horizontalBar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
maintainAspectRatio: false,
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
javascript
jquery
chart.js
Vincent T.
quelle
quelle
Wenn Sie das Seitenverhältnis beibehalten in Optionen deaktivieren, wird die verfügbare Höhe verwendet:
quelle
destroy()
die Höhe der Leinwand nach dem Zerstören durcheinander gebracht werden und muss vor der Erstellung erneut angewendet werden, wenn Sie das Diagramm erstellen und es dann beim zweiten Mal erneut auf derselben Leinwand erstellen. Sie können jedoch die Zerstörung vermeiden undupdate
stattdessen die Methode verwenden, wenn Sie die Optionen nicht ändern.Am einfachsten ist es, einen Container für die Leinwand zu erstellen und deren Höhe festzulegen:
und setzen
quelle
maintainAspectRatio
umfalse
in den Optionen des Graphen, da sonst dieheight
über das zugeordnetestyle
Attribut wird nicht wirklich wirksam.responsive
Option isttrue
. Details: chartjs.org/docs/latest/general/…height
Eigenschaft auf einem übergeordneten Element und nicht auf der Leinwand befinden mussSie können Ihr Canvas-Element in ein übergeordnetes Div einbinden, das relativ positioniert ist, und diesem Div dann die gewünschte Höhe geben, indem Sie in Ihren Optionen die Option prepareAspectRatio: false festlegen
quelle
Dieser hat für mich gearbeitet:
Ich habe die Höhe von HTML eingestellt
Dann habe ich deaktiviert, um das Seitenverhältnis beizubehalten
quelle
Er hat recht. Wenn Sie bei jQuery bleiben möchten, können Sie dies tun
oder
quelle
Setzen Sie die AspectRatio-Eigenschaft des Diagramms auf 0, was den Trick für mich getan hat ...
quelle
Sie sollten das HTML-Höhenattribut für das Canvas-Element wie folgt verwenden:
quelle
Ich habe einen Container erstellt und die gewünschte Höhe des Ansichtsfensters festgelegt (abhängig von der Anzahl der Diagramme oder den diagrammspezifischen Größen):
Um die Bildschirmgröße dynamisch zu gestalten, stelle ich den Container wie folgt ein:
Natürlich ist es sehr wichtig (wie bereits mehrfach erwähnt), die folgenden
option
Eigenschaften Ihres Diagramms festzulegen:quelle
Sie können die Abmessungen auch auf die Leinwand einstellen
Setzen Sie dann die Antwortoptionen auf false , um das Diagramm immer in der angegebenen Größe zu halten.
quelle
Das Diagramm musste das übergeordnete Element zu 100% füllen, anstatt die Höhe manuell einzustellen, und das Problem bestand darin, das übergeordnete div zu zwingen, immer den verbleibenden Platz zu füllen.
Nach dem Festlegen der Reaktions- und Verhältnisoptionen ( siehe zugehöriges Diagrammdokument ) hat das folgende CSS den Trick ausgeführt:
html
scss:
quelle
Nur um die Antwort von @numediaweb zu ergänzen
Für den Fall, dass Sie Ihren Kopf gegen die Wand schlagen, weil Sie die folgenden Anweisungen
maintainAspectRatio=false
befolgt haben: Ich habe meinen Code ursprünglich aus einem Beispiel kopiert, das ich auf einer Website zur Verwendung von Chart.js mit Angular 2+ erhalten habe:Damit dies korrekt funktioniert, müssen Sie das eingebettete (und nicht benötigte) entfernen.
style="display: block"
Element Definieren Sie stattdessen eine Klasse für das einschließende div und definieren Sie deren Höhe in CSS.Sobald Sie dies getan haben, sollte das Diagramm eine ansprechende Breite, aber eine feste Höhe haben.
quelle