Saya ingin menggambar bagan batang horizontal dengan Chart.js tetapi ia terus menskalakan bagan daripada menggunakan ketinggian yang saya tetapkan kanvas dari naskah.
Apakah ada cara untuk mengatur ketinggian grafik dari skrip?
Lihat biola: 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
sumber
sumber
Jika Anda menonaktifkan rasio aspek pemeliharaan dalam opsi maka menggunakan tinggi yang tersedia:
sumber
destroy()
membuat bagan dan kemudian membuatnya lagi di kanvas yang sama untuk kedua kalinya, ketinggian kanvas dapat kacau setelah menghancurkan dan harus diterapkan kembali sebelum penciptaan. Meskipun demikian, Anda dapat menghindari penghancuran dan menggunakanupdate
metode sebagai gantinya, jika Anda tidak mengubah opsi.Cara termudah adalah membuat wadah untuk kanvas dan mengatur ketinggiannya:
dan mengatur
sumber
maintainAspectRatio
untukfalse
dalam pilihan grafik, jikaheight
ditugaskan melaluistyle
atribut tidak akan benar-benar berlaku.responsive
opsi ini adalahtrue
. Detail: chartjs.org/docs/latest/general/…height
properti tersebut harus pada elemen induk dan bukan pada kanvasAnda dapat membungkus elemen kanvas Anda dalam div induk, relatif diposisikan, lalu memberikan div itu ketinggian yang Anda inginkan, mengatur maintainAspectRatio: false di opsi Anda
sumber
Yang ini bekerja untuk saya:
Saya mengatur ketinggian dari HTML
Lalu saya dinonaktifkan untuk mempertahankan aspek rasio
sumber
Dia benar. Jika Anda ingin tetap dengan jQuery Anda bisa melakukan ini
atau
sumber
Setel properti aspectRatio bagan ke 0 lakukan trik untuk saya ...
sumber
Anda harus menggunakan atribut tinggi html untuk elemen kanvas sebagai:
sumber
Saya membuat wadah dan mengatur ketinggian port tampilan yang diinginkan (tergantung pada jumlah bagan atau ukuran bagan tertentu):
Agar dinamis dengan ukuran layar saya mengatur wadah sebagai berikut:
Tentu saja sangat penting (seperti yang telah dirujuk berkali-kali) atur
option
properti berikut dari bagan Anda:sumber
Anda juga dapat mengatur dimensi ke kanvas
Dan kemudian mengatur opsi responsif ke false untuk selalu mempertahankan grafik pada ukuran yang ditentukan.
sumber
Diperlukan bagan untuk mengisi elemen induk 100%, daripada mengatur ketinggian secara manual, dan masalahnya adalah memaksa div induk untuk selalu mengisi ruang yang tersisa.
Setelah menetapkan opsi responsif dan rasio (periksa chartjs doc terkait ), css berikut melakukan trik:
html
scss:
sumber
Hanya dengan menambahkan jawaban yang diberikan oleh @numediaweb
Jika Anda membenturkan kepala Anda ke dinding karena setelah mengikuti instruksi untuk mengatur
maintainAspectRatio=false
: Saya awalnya menyalin kode saya dari contoh yang saya dapatkan di situs web tentang menggunakan Chart.js dengan Angular 2+:Untuk membuat ini bekerja dengan benar, Anda harus menghapus embedded (dan tidak perlu)
style="display: block"
Alih-alih menentukan kelas untuk div yang melampirkan, dan menentukan tingginya dalam CSS.Setelah Anda melakukannya, bagan harus memiliki lebar responsif tetapi ketinggian tetap.
sumber