Saya menggunakan grafik Gauge berdasarkan ( Chartjs-tsgauge ). Saya ingin mengatur warna latar belakang untuk bagan terpisah dari batas ukuran. Masalah dengan bagaimana Charts.JS merender latar belakang karena plugin yang saya gunakan tidak memiliki kode tentang latar belakang. Misalnya, saya memiliki Gauge dengan batas [0, 20, 40, 60, 80, 100]
. Saya ingin mengatur [0-30]
ke hijau, [30-70]
ke kuning dan [70-100]
merah. Kode saat ini: CodePEN
Ini pilihan saya saat ini.
var ctx = document.getElementById("canvas").getContext("2d");
new Chart(ctx, {
type: "tsgauge",
data: {
datasets: [{
backgroundColor: ["#0fdc63", "#fd9704", "#ff7143"],
borderWidth: 0,
gaugeData: {
value: 7777,
valueColor: "#ff7143"
},
gaugeLimits: [0, 3000, 7000, 10000]
}]
},
options: {
events: [],
showMarkers: true
}
});
Dan inilah pendekatan saya untuk mengatur warna latar belakang.
new Chart(ctx, {
type: "tsgauge",
data: {
datasets: [{
backgroundColor: ["#0fdc63", "#fd9704", "#ff7143"],
borderWidth: 0,
gaugeData: {
value: 50,
valueColor: "#ff7143"
},
gaugeLimits: [0, 20, 40, 60, 80, 100],
gaugeColors: [{
min: 0,
max: 30,
color: ""
}, {
min: 30,
max: 70,
color: ""
},{
min:70,
max:100,
color: ""
}]
}]
},
options: {
events: [],
showMarkers: true
}
});
Saat ini Chart.JS
cocok warna 0
untuk i
dengan batas 0
ke i
. Saya juga berpikir menggambar bagan boneka lain dengan warna yang diinginkan dan meletakkannya di atas bagan nyata tetapi tampaknya cara cerdik melakukan ini.
javascript
html5-canvas
chart.js
kenarsuleyman
sumber
sumber
Jawaban:
Solusi Sebelumnya
Anda dapat sedikit mengubah dataset Anda untuk mencapai itu:
Karena Anda
gagueLimits
terbagi dalam rentang20
saat ini, jadi Anda tidak dapat mengakses batas 30,Jadi, apa yang saya lakukan di sini adalah menguraikan
guageLimits
ke kisaran split10
dan sekarang30
dapat diakses, begitu juga70
,Sekarang tentang warna, masing-masing Anda
guageLimits
memerlukan warna dalambackgroundColor
array, saya mengaturnya sesuai, periksa array di atas. Karena tidak ada warna yang sesuai yang dapat kosong, Anda mungkin perlu menggunakan warna yang sama hingga mencapai rentang warna berikutnya.Solusi Terbaru
Persyaratan Anda dihapus sekarang:
Sekarang, secara teknis jika Anda ingin mengatur rentang warna ke titik tertentu, Anda harus memiliki nilai pada
gaugeLimits
array, sehinggagaugeLimits
array yang diperkecil sekarang menjadi seperti ini:Nah, tidak, Anda dapat mengatur warna sesuai karena Anda memiliki titik yang ditentukan dalam array. Oleh karena itu,
backgroundColor
arraynya adalah:Sekarang, Trik terakhir
Anda masih perlu menyembunyikan 30, dan 70 dari skala, saya mencoba untuk beralih
showMarkers
dalam kode Anda, sepertinya itu mengaktifkan atau menonaktifkan skala angka yang terlihat seluruhnya, saya mencoba untuk memberikan array string, tetapi hanya menerimaboolean
Chartjs-tsgauge Tidak memberikan banyak dokumentasi tentang opsi yang tersedia, jadi saya menyelinap ke dalam kode dan menemukan
markerFormatFn
Apa yang dilakukannya adalah mengambil fungsi sebagai parameter dan Anda dapat memberikan fungsi yang memberi tahu apa yang harus dilakukan dengan masing-masing item marker Anda.
Jadi, saya datang dengan ide untuk menyediakan fungsi untuk hanya menunjukkan angka-angka yang dapat dibagi dengan 20 tanpa sisa, jika tidak mengembalikan string kosong, ini dia:
Periksa Cuplikan:
sumber