echarts - echarts获取当前时间窗口
问题描述
我目前正在做一个 Angular 项目,我必须在图中显示一些数据。我通过它的 NGXecharts 实现使用 echarts。
我的数据来自一个后端应用程序,该应用程序每 5 分钟扫描一次文件系统并计算添加了多少新文件。所以我每 5 分钟在 db 中保存一个扫描状态
scan date : epoch timestamp, number of new files : number
我们可以很容易地想象,一年之后,这使得大量的记录和数据被显示出来。图表充满了所有这些小样本。
我的 echart 是一个简单的图表,其中 xAxis type='time' 是 y 的实际值。
我想做但不知道怎么做,就是在用户放大(进/出)时捕捉时间窗口(开始:日期,结束:日期)。有了这个和正确配置的阈值,我将能够调用我的后端 API 以在我的数据集中获得或多或少的粒度。
例如,如果图表非常缩小显示几年,我会查询我的 api 要求每月汇总数据。如果窗口显示整月,我会查询每日汇总数据等。
我知道 echarts 有一个有效的 dataZoom 事件,但它提供数据值(y 轴的值)而不是 x 轴的时间值(最小值/最大值)。
{
type: 'datazoom',
// percentage of zoom start position, 0 - 100
start: number
// percentage of zoom finish position, 0 - 100
end: number
// data value of zoom start position; only exists in zoom event of triggered by toolbar
startValue?: number
// data value of zoom finish position; only exists in zoom event of triggered by toolbar
endValue?: number
}
有没有办法获得缩放事件的时间窗口?我知道像 Vis.js/Graph2D 这样的其他一些库在这方面做得很好,但它缺少我需要的 echarts 中的一些其他重要功能。
非常感谢你的帮助。
解决方案
几天前我有同样的问题,并通过以下步骤解决了我的问题:
- 您需要获取图表实例并绑定到
chartDataZoom
事件
<div
echarts
[options]="chartOption"
(chartInit)="onChartInit($event)"
(chartDataZoom)="onDataZoom()"
class="demo-chart">
</div>
- 创建这两个函数并访问选项对象中的 dataZoom 开始和结束值。
onChartInit(event: any): void {
this.echartsInstance = event;
}
onDataZoom(): void {
const dataZoom = this.echartsInstance.getOption().dataZoom[0];
console.log(
dataZoom.startValue, // You may need to format your output. Mine is a date as number.
dataZoom.endValue
);
// Here you can filter your data and update your chart data.
}
一件重要的事情是日期如何存储在选项中,它们被转换为number
类型,因此您需要转换回Date
格式以按预期显示。
推荐阅读
- mysql - 如何查找捐助者姓名及其一年的捐款总额,包括 ID 为 NULL 的匿名捐助者
- python-3.x - 如何在 MacOS 上安装 PyQt5?
- mysql - 无法添加或更新子行:即使我已经在父表上添加了行,外键约束也会失败
- java - 应用程序上下文获取空值
- google-sheets - 如何在谷歌表格中的公式中返回一个值
- c# - C#浮点到字符串分隔符
- r - stargazer 中多个多项式模型的变量名称
- python - 分析预测调用 Tensorboard
- javascript - 为什么我在 Jest 测试中收到错误 Unexpected keyword 'new'?
- c# - 在 Intent Architect 模板中,如何检查属性的类型是否为枚举顺序以生成适当的代码?