神戸学院大学 経営学部 林坂ゼミ

Chart.js 入門トップページ

« 戻る 次へ »

折れ線グラフ

まず,折れ線グラフの作成からスタートしてみよう.

目次に戻る

折れ線グラフを描いてみる

まず,HTMLのひな形を作成し,<div> 要素の中に id を指定した <canvas> 要素を配置します.


<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Chart.js</title>
</head>
<body>
  <div style="width: 100%; height: 300px;">
    <canvas id="myChart"></canvas>
  </div>
</body>
</html>

次に,Chart.js のスクリプトを </body> の直前で読み込みます.


<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Chart.js</title>
</head>
<body>
  <div style="width: 100%; height: 300px;">
    <canvas id="myChart"></canvas>
  </div>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</body>
</html>

さらにスクリプトを追加します.15行目では idmyChart である HTML 要素(つまり,10行目の canvas 要素)を取得して,2Dのコンテクストを生成しています.16行目で,Chart クラスのインスタンス(chartオブジェクト)を生成しています.ここで,{} は設定オブジェクトです.


<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Chart.js</title>
</head>
<body>
  <div style="width: 100%; height: 300px;">
    <canvas id="myChart"></canvas>
  </div>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
  var ctx = document.getElementById('myChart').getContext('2d');
  var chart = new Chart(ctx, {});
</script>
</body>
</html>

上のコードの設定オブジェクト {} の内側にチャートの種類やデータセット,オプションを次のとおり指定します.データセットの書き方はこのあたりを参考にすると良いでしょう.このコードによって簡単な折れ線グラフを出力することができます.なお,凡例をクリックすると,項目の表示/非表示を切り替えられることを確認してください.また,縦軸の範囲も自動的に設定されていることにも注意してください.


<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Chart.js</title>
</head>
<body>
  <div style="width: 100%; height: 300px;">
    <canvas id="myChart"></canvas>
  </div>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
  var ctx = document.getElementById('myChart').getContext('2d');
  var chart = new Chart(ctx, {
    type: 'line',
    data: {
      labels: ["1回目", "2回目", "3回目", "4回目", "5回目"],
      datasets: [{
        label: "英語",
        backgroundColor: 'rgba(255, 0, 0, 0.5)',
        borderColor: 'rgba(255, 0, 0, 0.5)',
        data: [47, 50, 63, 57, 75],
      },
      {
        label: "数学",
        backgroundColor: 'rgba(0, 0, 255, 0.5)',
        borderColor: 'rgba(0, 0, 255, 0.5)',
        data: [63, 45, 72, 85, 64],
      }]
    },
    options: {}
  });
</script>
</body>
</html>

目次に戻る

縦軸を0から始める

上のグラフではオプションを一切設定していないため,縦軸の範囲が自動的に設定されていました.縦軸の始点を0に固定したい場合は,オプションで beginAtoZero を有効にします.


<script>
  var ctx = document.getElementById('myChart').getContext('2d');
  var chart = new Chart(ctx, {
    type: 'line',
    data: {
      labels: ["1回目", "2回目", "3回目", "4回目", "5回目"],
      datasets: [{
        label: "英語",
        backgroundColor: 'rgba(255, 0, 0, 0.5)',
        borderColor: 'rgba(255, 0, 0, 0.5)',
        data: [47, 50, 63, 57, 75]
      },
      {
        label: "数学",
        backgroundColor: 'rgba(0, 0, 255, 0.5)',
        borderColor: 'rgba(0, 0, 255, 0.5)',
        data: [63, 45, 72, 85, 64]
      }]
    },
    options: {
      scales: {
        y: {
          beginAtZero: true
        }
      }
    }
  });
</script>

目次に戻る

縦軸の範囲を指定する

次に,縦軸の範囲を指定する方法を確認します.例えば suggestedMinsuggestedMax を使って縦軸の範囲を30から75に設定してみます.しかしながら,数学の最大値が85であることから,数学の項目が表示されている場合には,30から90(または85)という範囲に変更されることにも注意してください.その他のオプションもあるので,詳細はこちらで確認してください.


<script>
  var ctx = document.getElementById('myChart').getContext('2d');
  var chart = new Chart(ctx, {
    type: 'line',
    data: {
      labels: ["1回目", "2回目", "3回目", "4回目", "5回目"],
      datasets: [{
        label: "英語",
        backgroundColor: 'rgba(255, 0, 0, 0.5)',
        borderColor: 'rgba(255, 0, 0, 0.5)',
        data: [47, 50, 63, 57, 75]
      },
      {
        label: "数学",
        backgroundColor: 'rgba(0, 0, 255, 0.5)',
        borderColor: 'rgba(0, 0, 255, 0.5)',
        data: [63, 45, 72, 85, 64]
      }]
    },
    options: {
      scales: {
        y: {
          suggestedMin: 30,
          suggestedMax: 75
        }
      }
    }
  });
</script>

目次に戻る

項目を非表示にする

初期状態において特定の項目を非表示にしています.具体的には数学を非表示にしてみます.


<script>
  var ctx = document.getElementById('myChart').getContext('2d');
  var chart = new Chart(ctx, {
    type: 'line',
    data: {
      labels: ["1回目", "2回目", "3回目", "4回目", "5回目"],
      datasets: [{
        label: "英語",
        backgroundColor: 'rgba(255, 0, 0, 0.5)',
        borderColor: 'rgba(255, 0, 0, 0.5)',
        data: [47, 50, 63, 57, 75]
      },
      {
        label: "数学",
        backgroundColor: 'rgba(0, 0, 255, 0.5)',
        borderColor: 'rgba(0, 0, 255, 0.5)',
        data: [63, 45, 72, 85, 64],
        hidden: true
      }]
    },
    options: {
      scales: {
        y: {
          suggestedMin: 30,
          suggestedMax: 75
        }
        }
      }
  });
</script>

目次に戻る

軸ラベルを表示する

軸ラベルは次のコードで設定することができます.


<script>
  var ctx = document.getElementById('myChart').getContext('2d');
  var chart = new Chart(ctx, {
    type: 'line',
    data: {
      labels: ["1回目", "2回目", "3回目", "4回目", "5回目"],
      datasets: [{
        label: "英語",
        backgroundColor: 'rgba(255, 0, 0, 0.5)',
        borderColor: 'rgba(255, 0, 0, 0.5)',
        data: [47, 50, 63, 57, 75]
      },
      {
        label: "数学",
        backgroundColor: 'rgba(0, 0, 255, 0.5)',
        borderColor: 'rgba(0, 0, 255, 0.5)',
        data: [63, 45, 72, 85, 64],
        // hidden: true
      }]
    },
    options: {
      scales: {
        x: {
          title: {
            display: true,
            text: '試験回数'
          }
        },
        y: {
          suggestedMin: 30,
          suggestedMax: 75,
          title: {
            display: true,
            text: '得点'
          }
        }
      }
    }
  });
</script>

目次に戻る

レスポンシブに

これまで作成したグラフは高さの最大値が 300px で,アスペクト比(縦横比)は常に横2に対して縦が1でした.つまり,Web ブラウザの画面幅(厳密には <canvas> の親要素である <div> の幅)が 600px 以上になると,グラフの大きさは 600px × 300px で固定されます.また,画面幅が 600px を下回ると,アスペクト比 2:1 を保ったままグラフが縮小されるはずです.

グラフが常に画面の幅いっぱいに表示させることもできます.そのためには,maintainAspectRatiofalse にして,2:1の制約を解除します.一方で,responsive は規定値が true であることから,この行は省略しても構いません.このコードではグラフの高さが常に 300px で固定され,幅は画面の幅を最大限に利用していることに注意してください.


<script>
  var ctx = document.getElementById('myChart').getContext('2d');
  var chart = new Chart(ctx, {
    type: 'line',
    data: {
      labels: ["1回目", "2回目", "3回目", "4回目", "5回目"],
      datasets: [{
        label: "英語",
        backgroundColor: 'rgba(255, 0, 0, 0.5)',
        borderColor: 'rgba(255, 0, 0, 0.5)',
        data: [47, 50, 63, 57, 75]
      },
      {
        label: "数学",
        backgroundColor: 'rgba(0, 0, 255, 0.5)',
        borderColor: 'rgba(0, 0, 255, 0.5)',
        data: [63, 45, 72, 85, 64]
        // hidden: true,
      }]
    },
    options: {
      scales: {
        x: {
          title: {
            display: true,
            text: '試験回数'
          }
        },
        y: {
          suggestedMin: 30,
          suggestedMax: 75,
          title: {
            display: true,
            text: '得点'
          }
        }
      },
      responsive: true, // 規定値なので省略可能
      maintainAspectRatio: false // アスペクト比の標準は2:1
    }
  });
</script>

目次に戻る