【问题标题】:Programmatically draw rect and line in Highcharts with zoom以编程方式在 Highcharts 中使用缩放绘制矩形和线条
【发布时间】:2016-09-13 12:30:59
【问题描述】:

我正在使用 Highcharts.Renderer 使用 path()rect() 在 Highcharts 中进行一些编程绘图。在下面的代码中,我手动绘制了直线和矩形的坐标。实际上,它们与主要数据系列(带有值的日期)有关。

如何以编程方式绘制某些内容并进行缩放?

主图,带缩放:

    chart: {
            zoomType: 'x',
    },
    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },

    series: [{
        data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
    }]

程序绘图:

 chart.renderer.rect(100, 110, 100, 100, 5)
        .attr({
            'stroke-width': 2,
            stroke: 'red',
            fill: 'transparent',
            zIndex: 3
        })
        .add();
  var path = [
    'M', 100, 100,
    'L', 130, 110,
    'L', 160, 105,
    'L', 190, 150,
    ];
  chart.renderer.path(path)
        .attr({
        'stroke-width': 2,
        stroke: 'blue',
        zIndex: 4
      })
      .add();

http://jsfiddle.net/n8ro1b9m/1/

【问题讨论】:

    标签: javascript highcharts draw


    【解决方案1】:

    现在您并没有真正使用图表值 - 您正在独立于您的系列绘制矩形和路径。您可以使用点 y 和 x 值以及 Axis.toPixels() 方法将绘图与图表连接起来:http://api.highcharts.com/highcharts/Axis.toPixels

    $(function() {
      var addRect = function(chart) {
        $('.rect').remove();
        var xAxis = chart.xAxis[0],
          yAxis = chart.yAxis[0]
        chart.renderer.rect(xAxis.toPixels(1), 110, xAxis.toPixels(2) - xAxis.toPixels(1), 100, 5)
          .attr({
            'stroke-width': 2,
            stroke: 'red',
            fill: 'transparent',
            zIndex: 0
          }).addClass('rect')
          .add();
        chart.renderer.rect(0, 0, chart.plotLeft, chart.chartHeight + chart.plotTop, 5)
          .attr({
            fill: 'white',
            zIndex: 0
          }).addClass('rect')
          .add();
      };
      $('#container').highcharts({
        chart: {
          zoomType: 'x',
          events: {
            redraw: function() {
              addRect(this);
            },
            load: function() {
              addRect(this);
            }
          }
        },
        xAxis: {
          categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
        series: [{
          data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
        }]
      });
    });
    

    在这里你可以看到一个例子:http://jsfiddle.net/n8ro1b9m/4/

    【讨论】:

      【解决方案2】:

      您可以通过以下方式在函数中使用series.data 值:

      chart.series[0].data[i].y
      

      i 是系列中点的编号。 这是你想做的吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        • 1970-01-01
        相关资源
        最近更新 更多