Я хочу отобразить все точки на моей диаграмме из полученных данных, но я не хочу отображать для них все метки, потому что тогда диаграмма не очень удобочитаема. Я искал это в документации, но не смог найти ни одного параметра, который ограничивал бы это.
Я не хочу брать для примера только три метки, потому что тогда диаграмма также ограничена тремя точками. Является ли это возможным?
У меня сейчас что-то вроде этого:
Если бы я мог просто покинуть каждый третий-четвертый лейбл, было бы здорово. Но про варианты наклеек я абсолютно ничего не нашел.
Ответы:
Попробуйте добавить
options.scales.xAxes.ticks.maxTicksLimit
опцию:xAxes: [{ type: 'time', ticks: { autoSkip: true, maxTicksLimit: 20 } }]
источник
maxRotation: 0
если хотите, чтобы он не вращался перед тем, как начать сбрасывать метки.Для конкретности предположим, что ваш исходный список меток выглядит так:
["0", "1", "2", "3", "4", "5", "6", "7", "8"]
Если вы хотите отображать только каждую 4-ю метку, отфильтруйте свой список меток так, чтобы каждая 4-я метка была заполнена, а все остальные были пустой строкой (например
["0", "", "", "", "4", "", "", "", "8"]
).источник
""
также удаляются соответствующие всплывающие подсказки на графике!my_labels = [my_labels[i] if i % 10 == 0 else "" for i in range(len(my_list))]
. Число 10, конечно, можно объявить как константу в начале файла для упрощения параметризации процесса.""
, как в ответе на этот вопрос проблема вертикальной линии пояса с chart.js, где у OP была проблема с черной линией, появляющейся при первом появлении этой двойной кавычки, в таком случае это помогло, опять же как @ haywire упомянул, что удаляет ярлык из всплывающей подсказкиДля всех, кто хочет добиться этого на 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] = ''; } }); } }] } }
Затем передайте переменную options как обычно в:
myLineChart = new Chart(ctx, { type: 'line', data: data, options: options });`
источник
ОБНОВИТЬ:
Я обновил свою вилку с помощью последней версии (по состоянию на 27 января 2014 г.) из основной ветки NNick Chart.js. https://github.com/hay-wire/Chart.js/tree/showXLabels
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Для тех, кто все еще сталкивается с этой проблемой, я некоторое время назад разветвил Chart.js, чтобы решить ту же проблему. Вы можете проверить это: https://github.com/hay-wire/Chart.js/tree/skip-xlabels => Старая ветка! Проверьте ветку showXLabels на предмет последней версии.
Как использовать:
Применимо к гистограмме и линейной диаграмме.
Теперь пользователь может передать a,
{ showXLabels: 10 }
чтобы отобразить только 10 меток (фактическое количество отображаемых меток может немного отличаться в зависимости от общего количества меток, присутствующих на оси x, но оно все равно останется близким к 10)Очень помогает при очень большом количестве данных. Раньше график выглядел опустошенным из-за меток оси X, нанесенных друг на друга в тесноте. Теперь у
showXLabels
пользователя есть возможность уменьшить количество меток до любого количества меток, которые хорошо помещаются в доступном ему пространстве.Смотрите прикрепленные изображения для сравнения.
Без
showXLabels
опции:При
{ showXLabels: 10 }
переходе в вариант:Вот обсуждение этого вопроса: https://github.com/nnnick/Chart.js/pull/521#issuecomment-60469304
источник
для вращения оси
использовать это:
scales: { xAxes: [ { // aqui controlas la cantidad de elementos en el eje horizontal con autoSkip ticks: { autoSkip: true, maxRotation: 0, minRotation: 0 } } ] }
источник
Согласно проблеме # 12 на github chart.js . Текущие решения включают:
Однако через несколько минут я думаю, что есть лучшее решение.
Следующий фрагмент кода автоматически скроет метки . Путем изменения
xLabels
пустой строки перед вызовомdraw()
и восстановления после этого. Более того, можно применить вращающиеся метки 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
это внешняя зависимость.источник
У меня была проблема аналогичного типа, и мне было предоставлено хорошее решение для моей конкретной проблемы: показать метку во всплывающей подсказке, но не по оси x для линейной диаграммы chartjs . Посмотри, поможет ли это тебе
источник
Этот ответ работает как шарм.
Если вам интересно узнать об этой
clone
функции, попробуйте эту:var clone = function(el){ return el.slice(0); }
источник
В файле Chart.js вы должны найти (в строке 884 для меня)
var Line = function(... ... function drawScale(){ ... ctx.fillText(data.labels[i], 0,0); ...
Если вы просто обернуть этот вызов на одну строку , чтобы
fillText
с ,if ( i % config.xFreq === 0){ ... }
а затем вchart.Line.defaults
добавить что - то линии ,xFreq : 1
вы должны быть в состоянии начать использоватьxFreq
в вашемoptions
когда вы звонитеnew Chart(ctx).Line(data, options)
.Имейте в виду, это довольно взломано.
источник