目次
Chart.jsで縦横同じサイズの散布図を描く
JavaScriptでグラフを描くのに、Chart.jsを使います。
やりたいことは樹形図グラフを縦横同じサイズにしたいだけです。
デフォルトでは横長になります
canvasのデフォルト(幅300px、高さ150px)のバランスは以下のように横長です。
これを縦横サイズが同じ真四角の散布図を描く方法を探しました。
chart.canvas.parentNode.style.を使うとエラーに
まずは、canvasのサイズ指定についてこちらで調べました。
こちらに、このような記述があったので。
プログラムでコンテナサイズを変更することでも、チャートサイズを変更することができます。
chart.canvas.parentNode.style.height = '128px';
これを見て、javascript内で「chart.canvas.parentNode.style.height 」および「width」に指定すればコントロールできると思ったのですが、見事にエラーになりました(笑)。
Uncaught ReferenceError: chart is not defined
あれあれ。
コンテキストを使えばいけました
結局、
HTML側で
と定義したものをJavaScript側で
var ctx = document.getElementById('myChart').getContext('2d');
のように、コンテキストを取得してやればよかったみたいです。
肝心の、canvasのサイズ指定は
でいけました。
この結果、以下のような正方形のグラフにできました。
ま・・、今回はこれだけのことです。
参考:上記サンプルを描いたソースです
まずは、HTML部分の抜粋です。
<div class="mycanvas"> <canvas id="myChart"></canvas> </div> <script type="text/javascript" src="{% static "js/scatter01.js" %}"></script>
mycanvasクラスはCSSで以下のように定義してます。
.mycanvas { width:500px; height:500px; }
{% static "js/scatter01.js" %}という書き方は、djangoのテンプレートからコピーしてきたからなので、django以外の環境だと適切な相対パスに書き換えてください。
後述するJavaScriptを「scatter01.js」という名前で保存し、それを<script>で読み込んでいます。
canvasのID「MyChart」は、JavaScriptでセレクタで指定するためのものです。
今度は、JavaScript部分(scatter01.js)です。
window.chartColors = { red: "#FF0000", blue: "#00FF00" }; var color = Chart.helpers.color; function generateData() { var data = []; for (var i = 0; i < 120; i++) { data.push({ x: Math.floor( Math.random()*100 ), y: Math.floor( Math.random()*100 ) }); } return data; } var scatterChartData = { datasets: [{ label: 'dummy dataset', borderColor: window.chartColors.red, backgroundColor: window.chartColors.red, pointRadius: 3, data: generateData() }] }; window.onload = function() { var ctx = document.getElementById('myChart').getContext('2d'); ctx.canvas.width=500; ctx.canvas.height=500; window.myScatter = Chart.Scatter(ctx, { data: scatterChartData, options: { title: { display: true, text: 'Chart.js Scatter Chart' }, scales: { xAxes: [{ gridLines: { // 補助線(縦線) color: "rgba(255, 0, 0, 0.2)", // 補助線の色 zeroLineColor: "black" // x=0時の(縦線の色) }, ticks: { beginAtZero: true, min: 0, max: 100, }, }], yAxes: [{ gridLines: { // 補助線(縦線) color: "rgba(255, 0, 0, 0.2)", // 補助線の色 zeroLineColor: "black" // x=0時の(縦線の色) }, ticks: { beginAtZero: true, min: 0, max: 100, stepSize: 10, }, }], }, } }); };
とりあえずサンプルなので、データは「Math.floor( Math.random()*100 )」で0から99迄の乱数を発生させて作ってます。
あと、軸の設定まわり(scalesとかxAxesとか)の説明は、こちらにあります。
今回はこんなところで。
ではでは。