Javascript Highstock,setExtreme(缩放)后显示点计数的真实方式-不使用MIN和MAX计算所有数据

Javascript Highstock,setExtreme(缩放)后显示点计数的真实方式-不使用MIN和MAX计算所有数据,javascript,highcharts,stock,Javascript,Highcharts,Stock,当然,有一种方法可以计算缩放或任何更改视图后显示的所有点,并对此进行反应 我的目标是在Highchart 7.2.0股票图表中,如果“观察点”x“圆半径”,超过了(>)“观察端口像素”,我只是隐藏它们,或者对点做一些特殊的处理,因为其中一些是特殊的,仍然应该显示 因此,我需要: 如何获取:现在刚刚查看的点数(不在所有数据中添加“FOR”) (我只是认为,如果没有真正的方法,我最好统计svg对象,而不是:统计所有数据,并使用isInside和min和max) 最好的活动是:“Afteretextr

当然,有一种方法可以计算缩放或任何更改视图后显示的所有点,并对此进行反应

我的目标是在Highchart 7.2.0股票图表中,如果“观察点”x“圆半径”,超过了(>)“观察端口像素”,我只是隐藏它们,或者对点做一些特殊的处理,因为其中一些是特殊的,仍然应该显示

因此,我需要:

  • 如何获取:现在刚刚查看的点数(不在所有数据中添加“FOR”)
  • (我只是认为,如果没有真正的方法,我最好统计svg对象,而不是:统计所有数据,并使用isInsideminmax

  • 最好的活动是:“Afteretextremes”和“事件:{重画:”[我想已经解决了]
  • 我是如何关掉它们的[我想解决了]
  • 如果有像“amchart”这样的自动方式选项,我只要问“标记:{enabled:true”(当没有问题时)和“标记:{enabled:false”(我想已经解决了)
  • 解决办法如下:

            plotOptions: {
                series: {
                    marker: {
                        enabled:undefined,
                        enabledThreshold: 4,
                        symbol: 'circle',
                        radius: 4,
                    },
                }
            }
    
    就是这样,

    标记:{已启用:true, enabledThreshold:0(默认情况下)

    应该是:

    标记:{已启用:未定义, 启用阈值:4,(大于零)


    从这里获得帮助:

    最简单的方法是循环数据并检查
    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)
    
    var计数器;
    (职能(H){
    H.Series.prototype.translate=函数(){
    ...
    计数器=0;
    //翻译每一点
    对于(i=0;i=0&&
    plotY=0&&
    plotX在该链接的第三条评论以及GitHub问题中,@ppotaczek对此作出了回答:

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

    • 处理扩展数据也可以用来代替
    • 点对象有足够的选项,如isInside
    因为它是可能的第一个或最后一个点不会显示,只会影响折线图中的线条或其他类型的图表中的线条,因为也会放大Y

    对于极限开始时的计算,您可能需要:

    this.series[0].cropStart
    

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

    谢谢,但这正是我想要避免的,因为我认为应该有更好的方法。例如:Extreme之后,我们得到一个事件或这个的孩子,我们可以很容易地得到它。
    translate
    方法是在后台调用的。该解决方案只计算迭代次数-您不必创建额外的循环。我目前看不到更有效的解决方案。更正-对于需要排序数据的序列类型,您可以检查
    series.processedXData
    :谢谢@ppotaczek,真正的方法几乎就是这样。但是,如果您允许,我会完全回答我的问题。
    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)
    
        chart: {
            events: {
                render: function() {
                    console.log(this.series[0].points.length)
                }
            }
        },
    
    this.series[0].points[0].isInsdie.
    
    this.series[0].cropStart