Get the FREE Ultimate OpenClaw Setup Guide →

chartjs-quickref

npx machina-cli add skill sjnims/chartjs-expert/chartjs-quickref --openclaw
Files (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

  1. Step 1: Find a snippet that matches your need (eg currency labels).
  2. Step 2: Copy the block and paste into your Chart.js config or options.
  3. 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
Sponsor this space

Reach thousands of developers