勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

Chart.jsで描写したグラフを画像としてダウンロードさせる方法

  JavaScript

サイト内にChart.jsでグラフを描写し、ボタンやリンクをクリックすることで当該グラフを画像としてダウンロードさせたかった。追加のプラグイン等が必要かと思って調べたところ、標準搭載されているAPIで対応できるみたい。以下に対応方法及びサンプルをメモ。

 

サンプル

https://taitan916.info/sample/chart.js/image_download/

ページ左下の「ダウンロード」ボタンをクリックするとgraph.pngがダウンロードされる筈。

 

対応方法

ソースコード

<canvas id="graph"></canvas>
<button id="download">ダウンロード</button>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.querySelector('#graph').getContext('2d');
const myChart = new Chart(ctx, {
    type: 'line',
    data: {
        labels: ['1月', '2月', '3月', '4月', '5月', '6月'],
        datasets: [
            {
                label: '売り上げ',
                data: [100, 200, 80, 160, 90, 110]
            }
        ]
    },
    options: {
        title: {
            display: true,
            text: '折れ線グラフ'
        },
        scales: {
            y: {
                suggestedMin: 0,
                suggestedMax: 300
            }
        }
    }
});

const image = myChart.toBase64Image();

document.querySelector('#download').onclick = function() {
    const a = document.createElement('a');
    a.href = myChart.toBase64Image();
    a.download = 'graph.png';
    a.click();
}
</script>

 

リファレンス

.toBase64Image

https://www.chartjs.org/docs/latest/developers/api.html#tobase64image-type-quality

 - JavaScript

  関連記事

LightboxをjQuery無しで実装できる「Luminous」の利用方法

あるサイトのコーディングデータを貰った際、jQueryは使用していないのにLig ...

バニラJS対応(jQuery非依存)の画像スライダー系プラグイン「Flickity」の利用方法

画像スライダーを設置する場合「slick」プラグインを利用することが多い。ただ、 ...

JavaScriptで画像読み込み完了のタイミングを検知する「imagesLoaded」ライブラリの利用方法

大き目のサイズの画像をページに設置すると読み込み完了まで時間がかかる。その画像が ...

バニラJS対応(jQuery非依存)の画像遅延読み込みライブラリ「lazysizes」の利用方法

あるサイトのコーディングデータを貰った際に「lazysizes」というJavaS ...

「slick」でブラウザ幅がPCの場合はスライダーを表示し、スマホ幅の場合はスライダー無しにする方法

slickプラグインで画像スライダーを設置しているページがあり、PCのブラウザ幅 ...