#javascript #canvas #graph #charts #chart.js
Вопрос:
Я пытаюсь отображать текущие данные, которые становятся очень большими. Проблема в том, что линии выглядят очень тесными… Я не хочу, чтобы все точки данных были на месте, и я могу немного потерять точность здесь и там…
Итак, есть ли способ, которым я могу очистить линии в своей диаграмме? Предпочтительно, без удаления начальных элементов в данных.
**Вот код: **
var ctx = document.getElementById("myChart").getContext("2d");
var myChart = new Chart(ctx, {
type: "line",
data: {
labels: [new Date()],
datasets: [
{
label: "# of Votes",
data: [Math.random()],
borderWidth: 4,
},
],
},
options: {
elements: {
line: {
backgroundColor: "#22ff2252",
borderColor: "#00de00",
fill: true,
borderWidth: 10,
tension: 0.05,
},
point: {
radius: 0,
borderWidth: 0,
pointStyle: "triangle",
},
},
scales: {
y: {
beginAtZero: false,
},
xAxis: {
type: "time",
ticks: {
source: "auto",
autoSkip: true,
maxTicksLimit: 10,
maxRotation: 0,
minRotation: 0,
},
time: {
unit: "second",
},
},
},
},
});
setInterval(() => {
colors = ["#00de00", "#de0000"];
myChart.options.elements.line.borderColor =
colors[Math.floor(Math.random() * colors.length)];
myChart.data.datasets[0].data.push(Math.random());
var today = new Date();
var time =
today.getHours() ":" today.getMinutes() ":" today.getSeconds();
myChart.data.labels.push(new Date());
myChart.update();
}, 2500);
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.3.2/dist/chart.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/moment@2.27.0"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment@0.1.1"></script>
<div style="height: 90%; width: 90%">
<canvas id="myChart"></canvas>
</div>
Ответ №1:
Вы можете использовать плагин децимации, который позволяет определить параметр 'lttb'
или 'min-max'
алгоритм.
Децимация LTTB значительно сокращает количество точек данных. Это наиболее полезно для отображения тенденций в данных, используя только несколько точек данных.
Минимальное/максимальное прореживание сохранит пики в ваших данных, но может потребоваться до 4 точек для каждого пикселя. Этот тип децимации будет хорошо работать для очень зашумленного сигнала, где вам нужно видеть пики данных.
Пожалуйста, взгляните на Образец децимации данных и посмотрите, как это работает.
Комментарии:
1. Эй, я прочитал документы и подумал, что это решение, но я не могу его реализовать, мне нужно каким-то образом установить плагин? потому что я определил децимацию плагина в объекте конфигурации, но, похоже, это не работает для меня…
2. Попробуйте добавить
parsing: false
в свойdataset
. Также убедитесь, что все остальные требования выполнены (см. chartjs.org/docs/latest/configuration/… ).3. Да, но как вы думаете, есть ли способ уничтожить даже при включенном разборе?