スタートページ> Javascript/a>> Chart.js 目次
Chart.jsソースコード作成ツールchartjsGenerator.jsの解説書でもあり、chartjsGenerator.jsへの入力コードの生成ツールでもあります。
chartjsGenerator.js は、あくまでも個人用のツールなので、品質保証はしませんが、ご自由にお使いいただいて結構です。
<script src="http://www.kogures.com/hitoshi/javascript/chartjs/chartjsGenerator.js"></script>
chartjsGeneratorの特徴は、これにより作成したコードを利用者個人のファイル(以下myChart.htmlといいます)にコピー&ペーストすることにより、それ以降はchartjsGeneratorを離れた環境で、グラフの改良を行うことができることにあります。すなわち、myChart.htmlを生成するのが目的です。
Chart.jsは、グラフの作成の代表的なライブラリで、多様な機能を持っています。多くのプラグインもあります。
しかし、記述量が大きくなること、あまりにも多様な機能を持っているために覚えにくいことがあります。
私のような初心者には、単純な記述でChart.jsのコードを生成するツールがあれば便利だと感じ、chartjsGenerator.jsを自作しました。
また、Chart.jsやそのプラグインは、汎用性を持たせるために、自分にとっては必要だが特殊なことをするには不適切なことがあります。それを解決するには、単純にcanvasに書き込む機能を追加すればよいとしました。ここではそれを OverWriteオプションとしています。
グラフ種類 | タイプ | 利用関数 | |
単棒グラフ | bar | chartjs1Bar | |
複棒グラフ | bar | chartjsLineBar | |
積上げ棒グラフ | bar | chartjsLineBar | |
折線グラフ | line | chartjsLineBar | 複数系列でもよい |
積上げ折線グラフ | line | chartjsLineBar | |
曲線グラフ | line | chartjsLineBar | 点間を滑らかな曲線 |
複合グラフ | bar | chartjsCombination | 第一系列を棒グラフ、第二系列を折線グラフ |
積上げ水平棒グラフ | horizontalBar | chartjsHorizontalBar | |
帯グラフ | horizontalBar | chartjsBand | 百分率の水平棒グラフ |
円グラフ | pie | chartjsPieDoughnut | 一系列だけ |
ドーナッツ | doughnut | chartjsPieDoughnut | 一系列だけ |
基本操作
発展操作
chartjsLineBar( { グラフ種類: '複棒グラフ', 軸ラベル: 戻り値[0], ┐ 系列名: 戻り値[1], ├ 自動生成される データ: 戻り値[2], ┘ 系列色: [… … ]
Chart.js では、グラフは myChart.html で設定した canvas ('chartjsキャンバス') に描画されています。ここでのOverWriteとはこの canvas に直接上書きするだけのことです。
特にツールなどを使わなくても、 myChart.html 内部に
function OverWrite() { var canvas = document.getElementById('chartjsキャンバス'); var ctx = canvas.getContext('2d'); : : ここに ctx.strokeText("文字列", X座標, Y座標); などの canvas コードを記述 : }と記述して、OverWrite を実行するだけでよいといえます。
ここで面倒なのが、座標の取得です。試行錯誤で行うのは大変です。単純にいえば、このOverWriteオプションは、主要点の座標を提供することにあります。
[クリック点の座標表示]により、canvas をクリックすれば、その点の座標が表示されます。しかし、「全ての軸について~」上書きするような場合は、これでも煩雑です。
このOverWriteオプションでは、入力したデータの値とともに、グラフの軸や点などの座標を提供することにあります。これだけの情報があれば、上書き処理がかなり容易になりましょう。
Chart.jsでは、点や軸などの値は、グラフ自体には表示せず、マウスを合わせることにより表示するのは基本になっており、これらをグラフ上に表示するには dataLabelPlugin を用います(chartjsGenerator では「数値表示 = true」としたときにこのプラグインを用いています)。
しかし、グラフに特化した上書きを試行錯誤で行うには(我田引水)ですが、OverWriteオプションのほうが簡単なこともあります。
|
function chartjsOverWriteExecute() { // ======= クリックから得られた情報 var GXmin = 50; var GYmax = 0; var GXmax = 350; var GYmin = 300; // ======= 入力した情報 var グラフ種類 = 'ドーナッツ'; var 要素数 = 4; var 要素名 = ['賛成','中間','反対','無回答']; var データ = [ [200,150,100,50] ]; // ====== 計算による各座標 var 中心X = 200; var 中心Y = 150; var 半径 = 150.0; var 合計 = 500; var 比率 = [40.0,30.0,20.0,10.0]; // 角度は扇形の中央、円周との交点の座標 var 円周X = [343,154,57,154]; var 円周Y = [104,293,104,7]; // 扇形のほぼ中央の座標 var 内周X = [300,168,100,168]; var 内周Y = [118,250,118,50]; // 円周の外部に描いた仮想円のX座標。要素名を表示することが多い var 外周X = [371,144,29,144]; var 外周Y = [94,321,94,-21]; var canvas = document.getElementById('chartjsキャンバス'); var ctx = canvas.getContext('2d'); // ====================================== 円中央に合計値を表示 ctx.strokeStyle = 'black'; ctx.font = '18px serif'; ctx.textAlign = 'center'; ctx.strokeText("質問A", 中心X, 中心Y-15); var 合計文字列 = "(n=" + 合計 + ")"; ctx.strokeText(合計文字列, 中心X, 中心Y+15); for (var j = 0; j < 要素数; j++) { // ====================================== 各要素に回答数と比率を表示 ctx.font = '14px serif'; ctx.strokeText(データ[0][j], 内周X[j], 内周Y[j]-10); ctx.strokeText((比率[j] + "%"), 内周X[j], 内周Y[j]+10); // ====================================== 円弧から線を引く ctx.beginPath(); ctx.moveTo(円周X[j], 円周Y[j]); if (円周X[j] > 中心X) var 線長 = 20; else 線長 = -20; ctx.lineTo(円周X[j]+線長, 円周Y[j]); ctx.closePath(); // ctx.lineWidth = 1; ctx.stroke(); // ====================================== 要素名の表示 if (円周X[j] > 中心X) ctx.textAlign = 'start'; else ctx.textAlign = 'end'; ctx.strokeText(要素名[j], 円周X[j]+線長, 円周Y[j]+7); } } |
特に棒グラフや線グラフでは、chartjs での元データを、CSV形式ファイルで作成することが多いと思います。この関数は、CSファイルから系列データの配列群を得るためのものです。
一般形 chartjsCsvArray(CSVファイル, "row"|"col", "表示場所"|"window")
'csv-row.csv' 行型
,00年,05年,10年,15年,20年 |
'csv-col.csv' 列型
,製品A,製品B,製品C |
'chartjsCsvArray表示場所' |
chartjsCsvArray( 'chartjsGenerator/csv-row.csv', 'row', 'chartjsCsvArray表示場所' ); |
chartjsCsvArray( 'chartjsGenerator/csv-col.csv', 'col', 'window' ); |
var 戻り値 = chartjsCsvArray(… …); |