您是否正在寻找类似@ http://jsfiddle.net/jugal/cABfL/的东西?height您可以通过为您的 yAxis指定 s 并操作它来堆叠图表,top以便它们将一个堆叠在另一个之上
yAxis: [{
top: 300,
lineWidth: 2,
offset: 0,
height: 200,
tooltip: {
enabled: true,
formatter: function() {
return this.series.name + ": " + $wnd.Highcharts.numberFormat(this.y, 2);
}
}
},
{
height: 200,
lineWidth: 2,
offset: 0,
tooltip: {
enabled: true,
formatter: function() {
return this.value + 50;
}
}
}],
类似的堆叠示例可用@http ://www.highcharts.com/stock/demo/candlestick-and-volume
编辑
回答问题的第二部分(Also what other ways are there to create a similar chart?)。highchart 似乎没有为这种可视化带来任何开箱即用的东西,因此您需要自己围绕现有的行和列来获得这种可视化。
我就是这样做的。
我尝试为每个功能区使用堆叠条形图,因此需要 2 个系列,1 个用于线条,1 个用于两个功能区。但是在尝试之后,结果条形图只不过是一个旋转的柱形图(至少是一种),它似乎将垂直轴作为 X,水平轴作为 Y,因此它搞砸了任何其他图表,即折线图被弄乱了,因为它希望水平线是 X。
基本上使用条形图并没有让我走得太远。我继续使用折线图(用很粗的线lineWidth:50) 并为功能区的每个部分绘制了一个水平(每个点的 Y 常数)折线图,其中包含一个系列,因此能够为每个部分赋予不同的颜色。每个色带都需要一个单独的 Y 轴,如上所述具有不同的偏移量。还删除了所有工具提示、Y 轴标签和网格线,使其看起来与折线图不同,更像是功能区。可能需要工具提示,但折线图提供了点的工具提示,在我们的例子中,我们想要两点之间的部分的工具提示,因此编写了一个 mouseOver 事件处理程序并计算了那里的部分的长度。现在唯一受到伤害的部分是为功能区的每个部分创建一个系列,因此继续编写以下实用函数来接受值列表,
// usage: createSeries([0, 3, 4, 6], 1)
// Creates 4 series and assigns them all to yAxis 1
// you can extend this to take colors etc too, as per requirement
function createSeries(data, yAxisIndex) {
var i;
var series = [];
for (i = 0; i < data.length - 1; i++) { // Node lenghth-1
var start = data[i];
var end = data[i + 1];
series.push({
yAxis: yAxisIndex,
animation: false,
stack: 0,
data: [[start, 0], [end, 0]],
lineWidth: 50,
marker: {
enabled: false
},
tooltip: {
pointFormat: function() {
return "";
}
},
events: {
mouseOver: function() {
alert(this.data[1].x - this.data[0].x);
}
},
showInLegend: false
});
}
return series;
}
所需要的只是将这些系列推入现有系列,然后将其提供给 highchart 构造函数。
最终的 jsFiddle:http: //jsfiddle.net/jugal/cABfL/