ChartJS棒グラフのキャンバスの高さは固定されていても、幅はオーバーフローxになるようにするために、正しい設定をするのに問題があります。私はここで例を見つけました... http://jsfiddle.net/mbhavfwm/ ChartJS 1.0を使用していますが、私はChartJS 2.6を使用しています。この例ではChartJS 2を使用している別の例がありますが、この例では値が少数しか表示されず、javascriptを使用して幅がオーバーフローするようにADDSを追加しています。全く同じではありません。ChartJS 2.6 - 棒グラフの固定高さスクロール可能なX
私の問題は、すべてのデータが既に固定高さでレンダリングされるようにする方法はわかりませんが、キャンバスを親コンテナの幅に拘束しようとしません。私はそれがオーバーフローしたい。
これまで私がこれまで持っていたことは次のとおりです。 https://jsfiddle.net/fed79b7t/
HTML
<div class="chartWrapper">
<div class="chartAreaWrapper">
<canvas id="chart-FuelSpend" height="300" width="1200"></canvas>
</div>
<canvas id="axis-FuelSpend" height="300" width="0"></canvas>
</div>
CSS
.chartWrapper {
position: relative;
}
.chartWrapper > canvas {
position: absolute;
left: 0;
top: 0;
pointer-events: none;
}
.chartAreaWrapper {
width: 600px;
overflow-x: scroll;
}
JAVASCRIPT
function generateLabels() {
var chartLabels = [];
for (x = 0; x < 100; x++) {
chartLabels.push("Label" + x);
}
return chartLabels;
}
function generateData() {
var chartData = [];
for (x = 0; x < 100; x++) {
chartData.push(Math.floor((Math.random() * 100) + 1));
}
return chartData;
}
var chartData = {
labels: generateLabels(),
datasets: [{
label: "Test Data Set",
data: generateData()
}]
};
$(function() {
var canvasFuelSpend = $('#chart-FuelSpend');
var chartFuelSpend = new Chart(canvasFuelSpend, {
type: 'bar',
data: chartData,
maintainAspectRatio: false,
responsive: true,
options: {
tooltips: {
titleFontSize: 0,
titleMarginBottom: 0,
bodyFontSize: 12
},
legend: {
display: false
},
scales: {
xAxes: [{
ticks: {
fontSize: 12,
display: false
}
}],
yAxes: [{
ticks: {
fontSize: 12,
beginAtZero: true
}
}]
},
animation: {
onComplete: function() {
var sourceCanvas = chartFuelSpend.chart.canvas;
var copyWidth = chartFuelSpend.scales['y-axis-0'].width - 10;
var copyHeight = chartFuelSpend.scales['y-axis-0'].height + chartFuelSpend.scales['y-axis-0'].top + 10;
var targetCtx = document.getElementById("axis-FuelSpend").getContext("2d");
targetCtx.canvas.width = copyWidth;
targetCtx.drawImage(sourceCanvas, 0, 0, copyWidth, copyHeight, 0, 0, copyWidth, copyHeight);
}
}
}
});
});
私の目標はキャンバスの幅で定義されたフル1200ピクセルのグラフを持つことですが、Yを維持しながらコンテナをスクロールして残りのグラフを表示できるコンテナdivのみをコンテナdivに表示することです - 軸は所定の位置にある。
誰かが私が間違っていることについていくつかの光を当てることができますか?私は何が欠けていますか?
ありがとうございます!!!!!
ありがとうございました。これを使用してグラフにスクロール可能なデータを追加する方法がわかりました。しかし、追加するデータの量は何百もの列になる可能性があります。あなたの例を見て、addDataメソッドに渡されたカウントを100以上に変更すると、グラフの高さが私の望んでいないものになっています。高さは固定したままでなければなりません。何か案は? – Phil
私はyaxisにmaxTicksLimitを設定して、ダニの数を制限し、高さが成長するのを防ぐことができますが、運が良いとは思っていませんでした。それは、私が追加するデータが増えれば増えます。 – Phil
addData()内のforループのconsole.log(chart.height)にキャンバスの高さが同じであると表示される場合もありますが、奇妙に思えます。私が考えることができるのは、キャンバスの内容を必要以上に拡大させるChart JSのレンダリングの問題かもしれないということだけです。 – DibsyJr