chartjs-quickref
npx machina-cli add skill sjnims/chartjs-expert/chartjs-quickref --openclawFiles (1)
SKILL.md
4.9 KB
Chart.js Quick Reference (v4.5.1)
Copy-paste snippets for common Chart.js patterns.
Data Formatting
Currency Labels
ticks: {
callback: (value) => '$' + value.toLocaleString()
}
Percentage Labels
ticks: {
callback: (value) => value + '%'
}
Abbreviated Numbers (1K, 1M)
ticks: {
callback: (value) => {
if (value >= 1000000) return (value / 1000000).toFixed(1) + 'M';
if (value >= 1000) return (value / 1000).toFixed(1) + 'K';
return value;
}
}
Date/Time Labels
// Requires: import 'chartjs-adapter-date-fns'; (or luxon, moment)
scales: {
x: {
type: 'time',
time: {
unit: 'day',
displayFormats: { day: 'MMM d' }
}
}
}
Common Configurations
Hide Legend
plugins: { legend: { display: false } }
Hide Tooltip
plugins: { tooltip: { enabled: false } }
Hide Title
plugins: { title: { display: false } }
Start Y-axis at Zero
scales: { y: { beginAtZero: true } }
Set Axis Range
scales: { y: { min: 0, max: 100 } }
Horizontal Bar Chart
type: 'bar',
options: { indexAxis: 'y' }
Disable Animation
animation: false
Stacked Bar/Line Chart
scales: {
x: { stacked: true },
y: { stacked: true }
}
Styling
Chart.js Default Palette
const colors = [
'rgb(255, 99, 132)', // red
'rgb(54, 162, 235)', // blue
'rgb(255, 206, 86)', // yellow
'rgb(75, 192, 192)', // teal
'rgb(153, 102, 255)', // purple
'rgb(255, 159, 64)' // orange
];
Semi-Transparent Backgrounds
backgroundColor: 'rgba(54, 162, 235, 0.5)',
borderColor: 'rgb(54, 162, 235)'
Hide Grid Lines
scales: {
x: { grid: { display: false } },
y: { grid: { display: false } }
}
Custom Font
Chart.defaults.font.family = "'Inter', sans-serif";
Chart.defaults.font.size = 14;
Responsiveness
Fill Container
options: {
responsive: true,
maintainAspectRatio: false
}
<div style="height: 400px;">
<canvas id="myChart"></canvas>
</div>
Fixed Aspect Ratio
options: {
responsive: true,
aspectRatio: 2 // width:height = 2:1
}
Square Chart
options: { aspectRatio: 1 }
Dynamic Updates
Update Data
chart.data.datasets[0].data = [1, 2, 3, 4, 5];
chart.update();
Update Without Animation
chart.update('none');
Add Data Point
chart.data.labels.push('New Label');
chart.data.datasets[0].data.push(42);
chart.update();
Remove Data Point
chart.data.labels.pop();
chart.data.datasets[0].data.pop();
chart.update();
Destroy Chart
chart.destroy();
Event Handling
Click Handler
options: {
onClick: (event, elements) => {
if (elements.length > 0) {
const index = elements[0].index;
console.log('Clicked:', chart.data.labels[index]);
}
}
}
Export as Image
const imageUrl = chart.toBase64Image();
Tree-Shaking Imports
Bar Chart
import { Chart, BarController, BarElement, CategoryScale, LinearScale } from 'chart.js';
Chart.register(BarController, BarElement, CategoryScale, LinearScale);
Line Chart
import { Chart, LineController, LineElement, PointElement, CategoryScale, LinearScale } from 'chart.js';
Chart.register(LineController, LineElement, PointElement, CategoryScale, LinearScale);
Pie/Doughnut Chart
import { Chart, PieController, ArcElement, Legend, Tooltip } from 'chart.js';
Chart.register(PieController, ArcElement, Legend, Tooltip);
// Use DoughnutController for doughnut charts
With Legend and Tooltip
import { Legend, Tooltip } from 'chart.js';
Chart.register(Legend, Tooltip);
Quick Start Templates
Minimal Bar Chart
new Chart(ctx, {
type: 'bar',
data: {
labels: ['A', 'B', 'C'],
datasets: [{ data: [10, 20, 30] }]
}
});
Minimal Line Chart
new Chart(ctx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar'],
datasets: [{ data: [10, 20, 15] }]
}
});
Minimal Pie Chart
new Chart(ctx, {
type: 'pie',
data: {
labels: ['Red', 'Blue', 'Yellow'],
datasets: [{ data: [30, 50, 20] }]
}
});
Source
git clone https://github.com/sjnims/chartjs-expert/blob/main/skills/chartjs-quickref/SKILL.mdView on GitHub Overview
Chart.js Quick Reference provides copy-paste snippets for common v4.5.1 patterns. It covers data formatting, common configurations, styling, responsiveness, and dynamic updates, so you can implement proven patterns without digging through full docs.
How This Skill Works
Snippets are organized by topic and kept concise for easy copy-paste into your chart configuration. You paste the block, then tailor data, labels, and imports to your project, including adapters or tree-shaking imports as needed.
When to Use It
- You need currency or percentage tick labels on axes or tooltips
- You want to format large numbers as 1K or 1M on the scale
- You are using date or time scales and need a time unit with display formats
- You want to quickly hide or tweak legend, tooltip, or title
- You need rapid data or label updates without consulting full docs
Quick Start
- Step 1: Find a snippet that matches your need (eg currency labels).
- Step 2: Copy the block and paste into your Chart.js config or options.
- Step 3: Replace data, labels, and imports to fit your project setup.
Best Practices
- Use blocks that match your Chart.js version and environment
- Test each snippet in isolation before integrating into your app
- Prefer tree-shaking imports and register only required controllers and elements
- Keep placeholders for data and labels; replace with your dataset
- Install required adapters (date-fns, luxon) when using time scales
Example Use Cases
- Currency labels addon to format axis ticks with a dollar sign
- Time-based x-axis with date-fns adapter and day unit
- Hide legend for a cleaner chart presentation
- Dynamically update chart data and call chart.update()
- Export the chart as an image with chart.toBase64Image()
Frequently Asked Questions
Add this skill to your agents