Charts.jsでグラフを作成しようとしています(現在のグラフは、Chart.jsのドキュメントから多少の変更を加えた、実際に動作させようとしている非常に単純な例です)。グラフは、私はそれを与えているキャンバス。関連するコードはすべてここにあります。
インポートするには:
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.6/Chart.bundle.min.js"></script>
次に、次のようにjavascriptファイルに接続します。
<script type="text/javascript" src="js/stats_tab.js"></script>
キャンバスをセットアップしました:
<div id="graph_2015" class ="stats_box">
<h4>Graph 2015</h4>
Text
<canvas id="myChart" width="200" height="200"></canvas>
</div>
そして最後に、stats_tab.jsに次のコードがあります。
window.onload=function(){
var ctx = document.getElementById("myChart").getContext("2d");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: [1,2,3,4,5,6,7,8,9,10],
datasets: [
{
label: "My First dataset",
data: [1,2,3,2,1,2,3,4,5,4]
}
]
},
options: {
}
});
}
グラフはうまく表示されますが、私が与えたキャンバスのサイズに合わせて拡大縮小することを拒否します。関係するdivのいずれにも関連するcssもありません。 chromeの検査機能により、最終的なグラフが指定した200 x 200ではなく676 x 676であることがわかります。何が起こっているのか本当にわかりません。
ありがとう!
キャンバスに設定した幅と高さのプロパティは、Chartjsのレスポンシブモードがfalse(デフォルトではtrue)の場合にのみ機能します。 stats_tab.jsをこれに変更すると動作します。
window.onload=function(){
var ctx = document.getElementById("myChart").getContext("2d");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: [1,2,3,4,5,6,7,8,9,10],
datasets: [
{
label: "My First dataset",
data: [1,2,3,2,1,2,3,4,5,4]
}
]
},
options: {
responsive: false
}
});
}
重要な点は次のとおりです。width
およびheight
プロパティは、ピクセル単位のサイズではなく、比率です。
<canvas id="myChart" width="400" height="400"></canvas>
この例では、1:1の比率です。したがって、html contenairの幅が676ピクセルの場合、チャートは676 * 675ピクセルになります
それはいくつかの一般的な間違いを説明できます。
maintainAspectRatio
をfalseに設定すると、この機能を無効にできます。
オプションで、maintainAspectRatio
をfalse
に設定し、responsive
をtrue
に設定します。これは最初に、キャンバスの寸法に合わせてグラフを拡大しようとします。キャンバスが画面に収まらない場合、つまりモバイルの場合、グラフはページに収まるように再スケーリングされます。
window.onload=function(){
var ctx = document.getElementById("myChart").getContext("2d");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: [1,2,3,4,5,6,7,8,9,10],
datasets: [
{
label: "My First dataset",
data: [1,2,3,2,1,2,3,4,5,4]
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
}
});
}
<canvas>
要素にwidth
とheight
が含まれていない場合 "attribute"(not css属性)。それらをそれぞれ1に設定してみてください(ちょうどその比率なので)
<canvas id="activeUsersPieChart" width="1" height="1"></canvas>
パーティーに少し遅れましたが、特に複数のチャートがあるページでは、この問題にかなり苦労しました。
この小さなヒントですべてが解決しました-私のチャートはすべてうまくフィットし、現在のdivに合わせて正確にサイズ変更されます。
これをページスタイルに追加します(8pxは個人設定です。必要に応じて変更します)。
<style type="text/css">
#canvas-holder {
background-color: #FFFFFF;
position: absolute;
top: 8px;
left: 8px;
right: 8px;
bottom: 8px;
}
</style>
適切なDivの場合:
<div id="canvas-holder">
<canvas id="chart-area"></canvas>
</div>
これ は機能するはずです。基本的に、javascriptにwidthおよびheightプロパティを追加するだけです:
var ctx = document.getElementById("myChart").getContext("2d");
ctx.canvas.width = 200;
ctx.canvas.height = 200;
var myChart = new Chart(ctx,.........
実際の問題は、キャンバスが親に応じて再スケーリングされることです。応答性を維持したかった。したがって、次のようなものが問題を解決します。
<div style="width:50%">
<canvas id="myChart"></canvas>
</div>
以下は私のために働いた、と私はチャートの応答性を維持することができました!
var ctxx = document.getElementById("myChart");
ctxx.height = 80;
グラフが適切にサイズ変更されないというまったく同じ問題がありました。この問題を回避するために、2つのことを行いました。
以下は私が使用したコードです:
css
#myGraph {
width: 100%;
height: 100%;
}
html
<canvas id="myGraph" />
Ctxでチャートを初期化するとき、次のようにオプションを設定します。
options: {
responsive: true,
maintainAspectRatio: false
}
これで、画面のサイズを変更すると、それに応じてグラフのサイズが変更されます。注:グラフはそのコンテナのサイズを埋めるので、キャンバスを入れたものがそのコンテナのサイズを埋めます。