如何在 HighCharts 中的列上开始线条

How to start lines on columns in HighCharts

我有一个包含多组柱形和线条的组合图表。每列对应一行。我希望每一行都从各自的列开始。这是一个例子:

http://jsfiddle.net/aozdjab2/1/

现在,列数是可变的,所以我想动态计算行的 pointPlacement

最好的方法是什么?有没有办法告诉行从列开始? 如果不是,我如何计算点位?行数和列数以及 x 轴上的组数会有所不同。

谢谢。


因为 SO 需要代码:

    {
        type: 'line',
        name: 'Jane-line',
        data: [3, 2, 1, 3, 4],
        pointPlacement: -0.2
    },
    {
        type: 'line',
        name: 'john-line',
        data: [2, 3, 5, 7, 6],
        pointPlacement: 0 
    },
    {
        type: 'line',
        name: 'joe-line',
        data: [4, 3, 3, 9, 0],
        pointPlacement: 0.2 
    }

您可以添加与您的线系列相关的新 xAxis。该系列将有更多类别,因此刻度将比您的法线轴更粗。

您可以检查一下,如果线系列在您的图表中有相关​​的可见列系列,如果是,您可以将这个系列添加到您的图表中。

在这里你可以找到我为这个案例编写的自定义函数:

var positioningLineSeries = function(chart, event) {
    if (redraw) {
      var columnSeries = [],
        each = Highcharts.each,
        numberOfColumnSeries = 0,
        categoriesFor2Axis = [],
        i;
      each(chart.series, function(s) {
        if (s.type === 'column' && s.visible) {
          columnSeries.push(s);
        }
      });
      for (i = 0; i < chart.series.length; i++) {
        if (chart.series[i].type === 'line') {
          chart.series[i].remove(false);
          i--;
        }
      }
      numberOfColumnSeries = columnSeries.length;
      redraw = false;
      each(chart.xAxis[0].categories, function(c) {
        for (i = 0; i < numberOfColumnSeries + 2; i++) {
          categoriesFor2Axis.push(c);
        }
      });
      chart.xAxis[1].update({
        categories: categoriesFor2Axis,
        min: 0,
        max: categoriesFor2Axis.length - 1
      }, false);

      var newData, newLineSeries = $.extend(true, [], lineSeries);

      each(newLineSeries, function(s) {
        newData = [];

        each(columnSeries, function(cS, i) {
          if (cS.options.ID === s.columnID) {

            each(s.data, function(p, j) {
              newData.push([p[0] + i + 1 + j * (numberOfColumnSeries + 1), p[1]]);
            });
            s.data = newData;
            chart.addSeries(s, false);
          }

        });


      });
      chart.redraw();
    } else {
      redraw = true;
    }
  };

在这里您可以找到它如何工作的示例:http://jsfiddle.net/aozdjab2/6/