繁体   English   中英

Highstock,在setExtreme(缩放)后获取显示点计数的真实方法-无需用MIN和MAX计数所有数据

[英]Highstock, True way of Get count of shown points after setExtreme (Zooming) - WITHOUT counting all data with MIN and MAX

当然,有一种方法可以对缩放或任何变化的视图后显示的所有点进行计数,并对此做出反应。

我的目标是在Highchart 7.2.0 stockChart中如果 视点 x “圆半径”大于(>) “视口像素” ,我只是将其隐藏起来,或者对点做一些特殊的处理,因为它们是特殊的,仍应显示。

所以我需要:

  1. 如何获取: 现在仅查看的点数 (无需为所有数据添加“ FOR”)

(我只是觉得如果它没有真正的办法,最好是我算SVG的对象,而不是: 计数我所有的数据,并使用isInside最小值最大值

  1. 最佳活动:“ afterSetExtremes ”和“ 事件 :{ 重绘 :” [解决我认为]
              events: {
                afterSetExtremes: function(event) {
                      console.log(event.min);
                      console.log(event.max);
                  }
              }
  1. 我如何关闭它们[解决了我认为的问题]
                    if (chart.userOptions.plotOptions.line.marker.enabled) {
                        chart.userOptions.plotOptions.line.marker.enabled=false;
                        chart.update({
                            plotOptions: {
                                marker: {
                                    enabled:false
                                }
                            }
                        });
                    }
  1. 如果有像“ amchart”这样的自动方式,我只问“ marker :{enabled: true ”(没有问题)和“ marker :{enabled: false ”。 [解决我认为]

解决了这个问题:

        plotOptions: {
            series: {
                marker: {
                    enabled:undefined,
                    enabledThreshold: 4,
                    symbol: 'circle',
                    radius: 4,
                },
            }
        }

就像这样:

标记:{enabled: true ,enabledThreshold:0,(默认)

应该 :

标记:{enabled: undefined ,enabledThreshold: 4 ,(大于零)

从这里获得帮助: https : //stackoverflow.com/a/54417034/7514010

最简单的方法是遍历数据并检查isInside点属性或点位置。 或者,您可以覆盖translate方法并计算现有循环中的可见点数:

var counter;

(function(H) {
    H.Series.prototype.translate = function() {
        ...

        counter = 0;
        // Translate each point
        for (i = 0; i < dataLength; i++) {
            ...
            point.isInside =
                plotY !== undefined &&
                plotY >= 0 &&
                plotY <= yAxis.len && // #3519
                plotX >= 0 &&
                plotX <= xAxis.len;

            // CHANGE

            if (point.isInside) {
                counter++;
            }

            // CHANGE

            ...
        }
        series.closestPointRangePx = closestPointRangePx;
        H.fireEvent(this, 'afterTranslate');
    }

})(Highcharts)

现场演示: http //jsfiddle.net/BlackLabel/yx1cj0at/

文件: https //www.highcharts.com/docs/extending-highcharts

它由@ppotaczek 在这里通过链接jsfiddle.net/BlackLabel/j1tLfaxu在第三条评论中以及在GitHub问题中得到了答复https : //github.com/highcharts/highcharts/issues/12017

如果需要获取现在正在查看的点数(通过使用afterSetExtremes重绘渲染事件):

    chart: {
        events: {
            render: function() {
                console.log(this.series[0].points.length)
            }
        }
    },
  • processedXData可得代替
  • points对象具有足够的选项,例如isInside
this.series[0].points[0].isInsdie.

因为有可能 没有显示第一个点或最后一个点,而只是影响了折线图或其他类型的图表中的线,所以也没有显示出来。

为了进行极端计算,您可能需要:

this.series[0].cropStart

并将其与您的主要数据进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM