取得したデータからチャート上のすべてのポイントを表示したいのですが、それらのすべてのラベルを表示したくないのは、チャートがあまり読みにくいからです。私はドキュメントでそれを探していましたが、これを制限するパラメータを見つけることができませんでした。
たとえば、グラフも3つのポイントに制限されているため、3つのラベルだけを取りたくありません。出来ますか?
私は今そのようなものを持っています:
3番目から4番目のラベルをすべて残すことができれば、それは素晴らしいことです。しかし、ラベルオプションについてはまったく何も見つかりませんでした。
options.scales.xAxes.ticks.maxTicksLimit
オプションを追加してみてください:
xAxes: [{
type: 'time',
ticks: {
autoSkip: true,
maxTicksLimit: 20
}
}]
具体的には、元のラベルのリストが次のようになっているとしましょう。
["0", "1", "2", "3", "4", "5", "6", "7", "8"]
4番目ごとのラベルのみを表示する場合は、ラベルのリストをフィルター処理して、4番目ごとのラベルが入力され、他のすべてのラベルは空の文字列(例:["0", "", "", "", "4", "", "", "", "8"]
)になります。
UPDATE:
フォークをNNickのChart.jsマスターブランチからの最新のプル(2014年1月27日現在)で更新しました。 https://github.com/hay-wire/Chart.js/tree/showXLabels
元の回答:
まだこの問題に直面している人のために、私はChart.jsをフォークして、同じ問題を解決しました。以下で確認できます: https://github.com/hay-wire/Chart.js/tree/skip-xlabels =>古いブランチ!最新のプルについては、showXLabelsブランチを確認してください。
使用方法:
棒グラフと折れ線グラフに適用できます。
ユーザーは{ showXLabels: 10 }
を渡して、10個のラベルのみを表示できるようになりました(実際に表示されるラベルの数は、x軸に存在するラベルの総数によって多少異なる場合がありますが、10個に近いままです)
非常に大量のデータがある場合に非常に役立ちます。以前は、グラフは狭い空間で互いに重ねられたx軸ラベルのために荒廃したように見えていました。 showXLabels
を使用すると、ユーザーは使用可能なスペースに収まるラベルの数にラベルの数を減らすことができます。
比較のために添付の画像をご覧ください。
showXLabels
オプションなし:
{ showXLabels: 10 }
がオプションに渡された場合:
それについての議論はここにあります: https://github.com/nnnick/Chart.js/pull/521#issuecomment-60469304
Chart JS V2でこれを達成したい人には、次のように動作します:
var options = {
scales: {
xAxes: [{
afterTickToLabelConversion: function(data){
var xLabels = data.ticks;
xLabels.forEach(function (labels, i) {
if (i % 2 == 1){
xLabels[i] = '';
}
});
}
}]
}
}
次に、オプション変数を通常どおりに渡します:
myLineChart = new Chart(ctx, {
type: 'line',
data: data,
options: options
});`
chart.js github issue#12 によると。現在のソリューションは次のとおりです。
しかし、数分後、より良い解決策があると思います。
次のスニペットは、ラベルを自動的に非表示にします。 draw()
を呼び出す前にxLabels
を空の文字列で変更し、その後に復元します。さらに、非表示の後にスペースが増えるため、xラベルの再回転を適用できます。
var axisFixedDrawFn = function() {
var self = this
var widthPerXLabel = (self.width - self.xScalePaddingLeft - self.xScalePaddingRight) / self.xLabels.length
var xLabelPerFontSize = self.fontSize / widthPerXLabel
var xLabelStep = Math.ceil(xLabelPerFontSize)
var xLabelRotationOld = null
var xLabelsOld = null
if (xLabelStep > 1) {
var widthPerSkipedXLabel = (self.width - self.xScalePaddingLeft - self.xScalePaddingRight) / (self.xLabels.length / xLabelStep)
xLabelRotationOld = self.xLabelRotation
xLabelsOld = clone(self.xLabels)
self.xLabelRotation = Math.asin(self.fontSize / widthPerSkipedXLabel) / Math.PI * 180
for (var i = 0; i < self.xLabels.length; ++i) {
if (i % xLabelStep != 0) {
self.xLabels[i] = ''
}
}
}
Chart.Scale.prototype.draw.apply(self, arguments);
if (xLabelRotationOld != null) {
self.xLabelRotation = xLabelRotationOld
}
if (xLabelsOld != null) {
self.xLabels = xLabelsOld
}
};
Chart.types.Bar.extend({
name : "AxisFixedBar",
initialize : function(data) {
Chart.types.Bar.prototype.initialize.apply(this, arguments);
this.scale.draw = axisFixedDrawFn;
}
});
Chart.types.Line.extend({
name : "AxisFixedLine",
initialize : function(data) {
Chart.types.Line.prototype.initialize.apply(this, arguments);
this.scale.draw = axisFixedDrawFn;
}
});
clone
は外部依存関係であることに注意してください。
私は同様のタイプの問題があり、私の特定の問題に対するニースの解決策を与えられました chartjs折れ線グラフのx軸ではなくツールチップにラベルを表示します 。これがあなたを助けるかどうか見てください