【问题标题】:How to enable y-axis panning while zoom in highcharts?如何在放大高图时启用 y 轴平移?
【发布时间】:2016-09-16 20:28:52
【问题描述】:

我想在放大图表时沿 Y 轴移动 现在我可以在缩放时在 X 轴上移动

下面是平移代码

chart: {
        renderTo: 'container1',
        type: 'column',
        zoomType: 'xy',
        panning: true,
        panKey: 'shift',}

任何帮助将不胜感激

【问题讨论】:

    标签: highcharts asp.net-mvc-5


    【解决方案1】:

    可能的解决方案:

    1. 您可以在 Highstock 中设置垂直滚动条。

          yAxis: {
              scrollbar: {
                  enabled: true
              }
          },
      

    文章:http://www.highcharts.com/news/224-scrollbars-for-any-axis

    演示:http://jsfiddle.net/gh/get/jquery/1.7.2/highcharts/highcharts/tree/master/samples/stock/yaxis/scrollbar/

    1. 使用 Barbara 建议的基于 the plugin 的封装代码(包含在下面),允许缩放 (xy) 和平移 (xy)。

    包装代码:

    (function (H) {
        H.wrap(H.Chart.prototype, 'pan', function (proceed) {
            var chart = this,
                hoverPoints = chart.hoverPoints,
                doRedraw,
                e = arguments[1],
                each = H.each;
    
            // remove active points for shared tooltip
            if (hoverPoints) {
                each(hoverPoints, function (point) {
                    point.setState();
                });
            }
    
            var mousePosX = e.chartX,
                mousePosY = e.chartY,
                xAxis = chart.xAxis[0],
                yAxis = chart.yAxis[0],
                startPosX = chart.mouseDownX,
                startPosY = chart.mouseDownY,
                halfPointRangeX = (xAxis.pointRange || 0) / 2,
                halfPointRangeY = (yAxis.pointRange || 0) / 2,
                extremesX = xAxis.getExtremes(),
                newMinX = xAxis.toValue(startPosX - mousePosX, true) + halfPointRangeX,
                newMaxX = xAxis.toValue(startPosX + chart.plotWidth - mousePosX, true) - halfPointRangeX,
                extremesY = yAxis.startingExtremes,
                newMaxY = yAxis.toValue(startPosY - mousePosY, true) + halfPointRangeY,
                newMinY = yAxis.toValue(startPosY + chart.plotHeight - mousePosY, true) - halfPointRangeY;
    
            if (xAxis.series.length && newMinX > Math.min(extremesX.dataMin, extremesX.min) && newMaxX < Math.max(extremesX.dataMax, extremesX.max) && newMinY > Math.min(extremesY.dataMin, extremesY.min) && newMaxY < Math.max(extremesY.dataMax, extremesY.max)) {
                xAxis.setExtremes(newMinX, newMaxX, false, false, {
                    trigger: 'pan'
                });
                yAxis.setExtremes(newMinY, newMaxY, false, false, {
                    trigger: 'pan'
                });
                doRedraw = true;
            }
    
            chart.mouseDownX = mousePosX;
            chart.mouseDownY = mousePosY;// set new reference for next run
    
            if (doRedraw) {
                chart.redraw(false);
            }
        });
    
    }(Highcharts));
    

    应在图表的回调或图表的加载事件中设置起始极值,例如:

        }, function(chart){
            chart.yAxis[0].startingExtremes = chart.yAxis[1].getExtremes();
        });
    

    演示:http://jsfiddle.net/Lxjqed02/3/

    【讨论】:

    • @faisal 两个演示都在工作 - 1 - 缩放后使用滚动条滚动,2 - 缩放后按住 shift 和平移以滚动。如果有什么不工作,请描述它并更新一个演示来展示它。
    【解决方案2】:

    HighCharts 中没有内置 Y 轴平移。但是,有一个插件可以解决问题:http://www.highcharts.com/plugin-registry/single/27/Y-Axis%20Panning 这些示例显示它可以与 highStock 一起使用,但它与 highCharts 的效果同样好。

    【讨论】:

    • 我已经尝试过这个插件,我认为它在缩放为“假”时可以工作,我想在缩放时在 Y 轴上移动
    • y轴平移看起来很直观,为什么highcharts没有内置这个功能?打开像x轴平移这样的开关比包装插件更容易。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多