[英]How to display specific data range on my chart's dataset using Zoom and Pan on Chart.js 3.+?
[英]Chart.js How to synchronize pan and zoom in multiple chats
我想在多个图表上同步平移和缩放。 我一直在使用 Chart.js 和 chartjs-plugin-zoom。
charjs-plugin-zoom 使用 onZoom 回调 function 调用事件。 所以,X轴两端的值就是通过回调function这样的方式得到的。
onZoom: function () {
var minVal = myChartA.getDatasetMeta(0).dataset._scale.chart.scales['x-axis-0']._table[0].time;
var maxVal = myChartA.getDatasetMeta(0).dataset._scale.chart.scales['x-axis-0']._table[1].time;
leftEnd = minVal;
rightEnd = maxVal;
updateChart();
}
然后使用 updateChart function 更新图表。
我以为其他图表应该用updateChart function得到的X轴两端的值来更新。 使用 Chart.helpers.each 调用 update() 来更新所有图表。
function updateChart() {
Chart.helpers.each(Chart.instances, function (instance) {
instance.oprions = {
scales: [{
xAxes: {
time: {
min: leftEnd,
max: rightEnd
}
}
}]
};
instance.update();
});
}
然而,并没有得到预期的结果。 Zoom-PAN 仅反映已操作的图表。
我认为 onZoom 回调 function 获取 X 轴的两个边缘,并每帧更新图表。 图表只能使用选项更新,因此 Chart.helpers.each 可用于一次更新所有图表。 如果要更新的 X 轴两端都是全局变量,则可以引用所有图形。
这种方法不正确吗? 选项更新方法错了吗? 更新时间错了吗?
更新
我通过参考https://www.chartjs.org/docs/latest/developers/updates.html了解了如何更新图表。
实际上,多个图表的 X 轴刻度范围已经改变,但最大缩放并再次停止工作。
原因是不更新参考。 什么是? 示例代码写为“需要更新引用”作为注释。 什么意思?
下面的示例代码调用:
xScale = chart.scales['newId'];
“newId”被重新分配为 scales id。
但我的是规模的最小值和最大值。 如何??
我想出了如何做到这一点。 如果我知道的话,这没什么大不了的。
回调 function updateChart() 应该是这样的:
function updateChart() {
Chart.helpers.each(Chart.instances, function (instance) {
instance.options.scales.xAxes[0].time.min = leftEnd;
instance.options.scales.xAxes[0].time.max = rightEnd;
instance.update();
});
}
重点是我的数据是时间序列数据,因此比例选项应该使用“时间”。
JSFillde已更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.