Contoh script penggunaan chartjs-plugin-datalabels di Chart.js
untuk menampilkan label pada chart
<!-- Elemen untuk chart nya -->
<canvas id="myChart"></canvas>
<!-- include JS nya -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels"></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx, {
type: 'bar',
data: {
labels: @json($labels),
datasets: [{
label: 'Total Penjualan',
data: @json($data),
backgroundColor: 'rgba(75, 192, 192, 0.8)',
borderColor: 'rgba(75, 192, 192, 1)',
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true,
ticks: {
callback: function(value, index, values) {
if (Number.isInteger(value)) {
return value.toString();
}
}
},
suggestedMax: Math.max.apply(null, @json($data)) + 100000
}
},
plugins: {
datalabels: {
anchor: 'end',
align: 'start',
formatter: function(value, context) {
// untuk pemisah ribuan
return value.toLocaleString();
},
color: 'black',
clamp: true,
display: function(context) {
var chart = context.chart;
var yScale = chart.scales.y;
var barTopPosition = yScale.getPixelForValue(context.dataset.data[context.dataIndex]);
var barBottomPosition = yScale.getPixelForValue(0);
var barHeight = barBottomPosition - barTopPosition;
return barHeight > 20;
}
}
}
},
plugins: [ChartDataLabels]
});
</script>
-
@jsonmerupakan blade directive Laravel untuk parse array menjadi format JSON $labelsadalah array tunggal berisi data tanggal-
$databerisi angka (total penjualan) dari tiap tanggal yang ada di labels -
tickspada sumbuyuntuk menampilkan hanya nilai-nilai bilangan bulat, jadi tidak ada koma -
suggestedMaxuntuk menambahkan panjang sumbuymenjadi ada jarak, karena nilainya berupa uang jadi ditambah 100000, jadi jika ada nilai maksimal tidak mentok sampai ke ujung chart nya -
clampdandisplaypada plugin untuk menampilkan label hanya jika masih ada space minimal 20 px, jika space nya dibawah itu, labelnya auto hide
Contoh controller di Laravel untuk mengambil data tanggal pada variabel
$labels dan totalnya pada variabel $data
$tgl_penjualan = Penjualan::selectRaw('DATE(tanggal) as tanggal, SUM(total) as total')
->whereMonth('tanggal', $bulan)
->whereYear('tanggal', $tahun)
->groupBy('tanggal')
->orderBy('tanggal', 'asc')
->get();
$labels = $tgl_penjualan->pluck('tanggal')->toArray();
$data = $tgl_penjualan->pluck('total')->map(function ($total) {
return (int) $total; // Pastikan total dalam bentuk integer
})->toArray();
$formattedLabels = array_map(function ($label) {
return Carbon::parse($label)->format('d-m-Y'); // Ubah format menjadi dd-mm-yyyy
}, $labels);
$labels = $formattedLabels;

Posting Komentar