如何在 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/
我有一个包含多组柱形和线条的组合图表。每列对应一行。我希望每一行都从各自的列开始。这是一个例子:
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/