Ich möchte alle Punkte in meinem Diagramm aus den Daten anzeigen, die ich erhalte, aber ich möchte nicht alle Beschriftungen für sie anzeigen, da das Diagramm dann nicht gut lesbar ist. Ich habe in den Dokumenten danach gesucht, aber keinen Parameter gefunden, der dies einschränken könnte.
Ich möchte zum Beispiel nicht nur drei Bezeichnungen nehmen, denn dann ist das Diagramm auch auf drei Punkte begrenzt. Ist es möglich?
Ich habe so etwas gerade:
Wenn ich einfach jedes drittvierte Label verlassen könnte, wäre es großartig. Aber ich habe absolut nichts über Label-Optionen gefunden.
Versuchen Sie, das options.scales.xAxes.ticks.maxTicksLimit
Option:
xAxes: [{
type: 'time',
ticks: {
autoSkip: true,
maxTicksLimit: 20
}
}]
Nehmen wir der Vollständigkeit halber an, Ihre ursprüngliche Etikettenliste sieht folgendermaßen aus:
["0", "1", "2", "3", "4", "5", "6", "7", "8"]
Wenn Sie nur jedes vierte Etikett anzeigen möchten, filtern Sie Ihre Etikettenliste so, dass jedes vierte Etikett ausgefüllt wird, und alle anderen sind die leere Zeichenfolge (z. B. ["0", "", "", "", "4", "", "", "", "8"]
).
UPDATE:
Ich habe meine Gabel mit dem neuesten Pull (Stand: 27. Januar 2014) aus NNicks Chart.js Master Branch aktualisiert. https://github.com/hay-wire/Chart.js/tree/showXLabels
URSPRÜNGLICHE ANTWORT:
Für diejenigen, die immer noch mit diesem Problem konfrontiert sind, habe ich vor einiger Zeit Chart.j ausgewählt, um das gleiche Problem zu lösen. Sie können es unter folgender Adresse überprüfen: https://github.com/hay-wire/Chart.js/tree/skip-xlabels => Älterer Zweig! Überprüfen Sie die showXLabels-Filiale auf den neuesten Pull.
Wie benutzt man:
Anwendbar auf Balkendiagramm und Liniendiagramm.
Der Benutzer kann jetzt ein { showXLabels: 10 }
Übergeben, um nur 10 Etiketten anzuzeigen.
Hilft sehr, wenn es eine sehr große Datenmenge gibt. Früher sah das Diagramm aufgrund von übereinandergezeichneten x-Achsen-Beschriftungen in dem engen Raum verwüstet aus. Mit showXLabels
hat der Benutzer jetzt die Möglichkeit, die Anzahl der Etiketten auf die Anzahl der Etiketten zu reduzieren, die in den ihm zur Verfügung stehenden Platz passen.
Siehe die beigefügten Bilder zum Vergleich.
Ohne showXLabels
Option:
Mit { showXLabels: 10 }
Übergeben an Option:
Hier ist eine Diskussion darüber: https://github.com/nnnick/Chart.js/pull/521#issuecomment-60469304
Für alle, die dies mit Chart JS V2 erreichen möchten, funktioniert Folgendes:
var options = {
scales: {
xAxes: [{
afterTickToLabelConversion: function(data){
var xLabels = data.ticks;
xLabels.forEach(function (labels, i) {
if (i % 2 == 1){
xLabels[i] = '';
}
});
}
}]
}
}
Übergeben Sie dann die Variable options wie gewohnt an:
myLineChart = new Chart(ctx, {
type: 'line',
data: data,
options: options
});`
Entsprechend der chart.js Github Ausgabe # 12 . Aktuelle Lösungen umfassen:
Nach ein paar Minuten denke ich jedoch, dass es eine bessere Lösung gibt.
Das folgende Snippet blendet Beschriftungen automatisch aus . Ändern Sie xLabels
mit einer leeren Zeichenfolge, bevor Sie draw()
aufrufen, und stellen Sie sie anschließend wieder her. Darüber hinaus können Sie die x-Beschriftungen neu drehen, da nach dem Ausblenden mehr Platz vorhanden ist.
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;
}
});
Bitte beachten Sie, dass clone
eine externe Abhängigkeit ist.
ich hatte eine ähnliche Art von Problem und bekam eine gute Lösung für mein spezielles Problem Beschriftung in QuickInfo, aber nicht in X-Achse für Diagramme Liniendiagramm . Sehen Sie, ob dies Ihnen hilft
Diese Antwort wirkt wie ein Zauber.
Wenn Sie sich über die Funktion clone
wundern, probieren Sie diese aus:
var clone = function(el){ return el.slice(0); }