我已经使用 Highcharts 设置了一个基本的可变宽度柱形图(又名 Marimekko),但是一旦删除或隐藏了一个系列,我就无法让它正确地重新堆叠列以消除数据间隙。
JSFIDDLE DEMO <-- 我已经在此处设置了该问题的演示。
您会注意到单击图例项会从图表中删除系列,但它也会删除数组中的所有以下数据点(即单击系列C会删除系列C、D和E,而它应该重绘为ABDE) . 由于 y 轴数据旨在显示所有系列的累积总和,因此这些应该重新排列为相邻列,没有间隙。我怎样才能让它正确渲染?
这篇文章使用了类似的演示代码并试图解决同样的问题,但是答案有点难以捉摸,我无法让它工作。
提前致谢!
$(function () {
var dataArray = [
{ name: 'A', x: 200, y: 120 },
{ name: 'B', x: 380, y: 101 },
{ name: 'C', x: 450, y: 84 },
{ name: 'D', x: 198, y: 75 },
{ name: 'E', x: 95, y: 55 }
];
function makeSeries(listOfData) {
var sumX = 0.0;
for (var i = 0; i < listOfData.length; i++) {
sumX += listOfData[i].x;
}
var allSeries = []
var x = 0.0;
for (var i = 0; i < listOfData.length; i++) {
var data = listOfData[i];
allSeries[i] = {
name: data.name,
data: [
[x, 0], [x, data.y],
{
x: x + data.x / 2.0,
y: data.y,
dataLabels: { enabled: false, format: data.x + ' x {y}' }
},
[x + data.x, data.y], [x + data.x, 0]
],
w: data.x,
h: data.y
};
x += data.x + 0;
}
return allSeries;
}
$('#container').highcharts({
chart: { type: 'area' },
xAxis: {
tickLength: 0,
labels: { enabled: true}
},
yAxis: {
title: { enabled: false}
},
plotOptions: {
series: {
events: {
legendItemClick: function () {
var pos = this.index;
var sname = this.name;
var chart = $('#container').highcharts();
while(chart.series.length > 0) {
chart.series[pos].remove(true);
}
dataArray[pos]= { name: sname, x: 0, y: 0 };
chart.series[0].setData(dataArray);
}
}
},
area: {
lineWidth: 0,
marker: {
enabled: false,
states: {
hover: { enabled: false }
}
}
}
},
series: makeSeries(dataArray)
});
});