Morris.jsを使ったグラフ作成

JavaScriptとSVGを使って折れ線グラフを書く方法はありますか?

Bing: はい、あります。JavaScriptとSVGを使って折れ線グラフを書く方法はいくつかありますが、ここでは3つの例を紹介します。

  1. 己の感覚のままに装飾しながら、SVGで折れ線グラフを描いてみる1 という記事では、SVGのpath要素とstroke-dasharray属性を使って、折れ線グラフにアニメーション効果をつける方法を説明しています。
  2. Vue.js + SVGで折れ線グラフを描く2 という記事では、Vue.jsのv-forディレクティブとSVGのg要素を使って、複数の折れ線グラフを描く方法を説明しています。
  3. SVGで綺麗なグラフを描くライブラリ×10選3 という記事では、SVGを使ったグラフライブラリの紹介と比較をしています。morris.js, Chart.js, D3.jsなどの有名なライブラリが紹介されています。

どの方法がお好みですか?

morris.jsを使って動的な折れ線グラフを作るサンプルコードを作成してください

Bing: morris.jsを使って動的な折れ線グラフを作るサンプルコードを作成することができます。以下の手順に従ってください。

  1. morris.jsは、raphaelとjqueryに依存しているため、HTMLファイルのheadタグ内に以下のスクリプトタグを追加します1

    <script src="[<https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js>](<https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js>)"></script>
    <script src="[<https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js>](<https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.2/jquery.min.js>)"></script>
    <script src="[<https://cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js>](<https://cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js>)"></script>
    
  2. 出力先に、divタグを設置します。id名と出力するグラフの高さを入力します1

    <div id="line-chart" style="height: 250px;"></div>
    
  3. グラフの出力内容を記述します。JavaScriptファイルまたはHTMLファイルのscriptタグ内に以下のコードを追加します1

    // グラフのデータを定義する
    var data = [
    	{ y: '2016', a: 100, b: 90 },
    	{ y: '2017', a: 75,  b: 65 },
    	{ y: '2018', a: 50,  b: 40 },
    	{ y: '2019', a: 75,  b: 65 },
    	{ y: '2020', a: 50,  b: 40 },
    	{ y: '2021', a: 75,  b: 65 },
    	{ y: '2022', a: 100, b: 90 }
    ];
    // グラフのオプションを定義する
    var options = {
    	element: 'line-chart', // 出力先のdivタグのid名
    	data: data, // グラフのデータ
    	xkey: 'y', // x軸に対応するデータのキー
    	ykeys: ['a', 'b'], // y軸に対応するデータのキー
    	labels: ['Series A', 'Series B'], // データのラベル
    	resize: true // ウィンドウサイズに応じてグラフサイズを変更するかどうか
    };
    // グラフを描画する
    var lineChart = new Morris.Line(options);
    
  4. HTMLファイルをブラウザで開くと、以下のような折れ線グラフが表示されます。

これでサンプルコードの作成は完了です。もし、グラフの見た目や動作を変更したい場合は、morris.jsのドキュメント を参照してください。

動的に値を追加する場合はどのようにすれば良いですか?

Bing: 動的に値を追加する場合は、morris.jsのsetDataメソッドを使って、グラフに新しいデータをセットすることができます1。例えば、以下のようにします。

// 新しいデータを定義する
var newData = [
  { y: '2016', a: 80, b: 70 },
  { y: '2017', a: 60,  b: 50 },
  { y: '2018', a: 40,  b: 30 },
  { y: '2019', a: 60,  b: 50 },
  { y: '2020', a: 40,  b: 30 },
  { y: '2021', a: 60,  b: 50 },
  { y: '2022', a: 80, b: 70 }
];

// グラフに新しいデータをセットする
lineChart.setData(newData);

これでグラフが以下のように更新されます。

もし、値を追加するだけでなく、要素も追加したい場合は、JavaScriptのinsertBeforeメソッドやappendChildメソッドを使って、divタグを動的に作成してから、グラフを描画することができます2

1つの点だけ色を変えることはできますか?