ZingChart JS - 获取可见节点

ZingChart JS - Get visible nodes

我使用 ZingChart library 创建了一个图形,一切都按预期工作。该图用于显示特定插座随时间变化的功耗。

加载图表后,系统会显示该时间段的 kWh 消耗量。

用户能够放大和缩小图表,当发生这种情况时,我想显示图表中显示的那段时间的功耗。

我正在使用缩放事件:

zingchart.render({ 
            id:'chartDiv',
            data:graphset,
            height:500,
            events:{
                zoom:function(p){
                    console.log(p);
                    console.log(zingchart.exec(p.id, 'getseriesdata', {}));
                    console.log(zingchart.exec(p.id, 'getseriesvalues', {}));
                    console.log(zingchart.exec(p.id, "getplotvalues", {}));
                }
            },
            width:"100%"
        });

当我放大或缩小时,函数 getseriesdata、getseriesvalues 和 getplotvalues 总是 return 完整的图形值,而不仅仅是可见的值。

p 对象为我提供了新的 x 和 y 限制,但我找不到使用它们来仅获取可见值的方法。

有人做过吗?

非常感谢任何帮助。

谢谢!

所以,这不是最好的解决方案,但暂时可以。

如果有人有任何改进此垃圾代码的提示,请随时发表评论。

使用 Moment.js 作为日期,我使用了缩放事件返回的最小和最大 date/time 值,并在这两个 date/time 之间添加了功耗值。

zingchart.render({ // Render Method[3]
            id:'chartDiv',
            locale:"MYLOCALE",
            data:graphset,
            height:500,
            events:{
                zoom:function(p){

                    var dateInit = moment(p.kmin).format("YYYY-MM-DD HH:mm:ss");
                    var dateEnd = moment(p.kmax).format("YYYY-MM-DD HH:mm:ss");
                    var newTotal = 0.0;
                    var arrayTotal = 0;

                    function getNewConsumption(element, index, array) {
                        if( moment(element[5]).isAfter(dateInit) && moment(element[5]).isBefore(dateEnd) ){
                            newTotal = newTotal + element[2];
                            arrayTotal++;
                        }
                    }

                    parseJSONReturn.forEach(getNewConsumption);

                    var new_average_consumption  = newTotal / arrayTotal;
                    var new_ms = moment(dateEnd).diff(moment(dateInit));
                    var new_d = moment.duration(new_ms).asHours();
                    var new_total_kwh = new Big((new_average_consumption * new_d) / 1000);

                    $("#kwh_consumption").empty().text(new_total_kwh.toFixed(2));
                }
            },
            width:"100%"
        });

zoom 事件 returns scaleX 的最小值和最大值(如 kminkmax)以及序列的最小值和最大值(如 xminxmax).

使用 xminxmax,您可以简单地将值数组切片以获取可见值。

这是一个例子。

zingchart.bind('myChart', 'zoom', function(p) {
    var start = p.xmin;
    var end = p.xmax + 1;
    var series = zingchart.exec('myChart', 'getseriesvalues')[0];
    series = series.slice(start, end+1);
    // You can now do whatever you want with the series values
});

You can view a working demo here.

完全披露:我在 ZingChart 团队。如果这能解决您的问题,请告诉我。