Javascript 要在Highchart基本柱状图中隐藏值为0的列吗
我试图隐藏具有零值和多个序列的列。给空值对我不起作用,因为它给了我不想要的空间。作为我的数据示例,请参考链接。我有类似的数据 数据示例:Javascript 要在Highchart基本柱状图中隐藏值为0的列吗,javascript,angular,highcharts,Javascript,Angular,Highcharts,我试图隐藏具有零值和多个序列的列。给空值对我不起作用,因为它给了我不想要的空间。作为我的数据示例,请参考链接。我有类似的数据 数据示例: Highcharts.chart('container'{ 图表:{ 类型:“列” }, 标题:{ 文字:“月平均降雨量” }, 副标题:{ 文本:'来源:WorldClimate.com' }, xAxis:{ 类别:[ “一月”, 二月,, “三月”, “四月”, “五月”, "六月",, 七月,, "八月",, "九月",, “十月”, 十一月,, “十
Highcharts.chart('container'{
图表:{
类型:“列”
},
标题:{
文字:“月平均降雨量”
},
副标题:{
文本:'来源:WorldClimate.com'
},
xAxis:{
类别:[
“一月”,
二月,,
“三月”,
“四月”,
“五月”,
"六月",,
七月,,
"八月",,
"九月",,
“十月”,
十一月,,
“十二月”
],
十字准星:对
},
亚克斯:{
分:0,,
标题:{
文字:“降雨量(毫米)”
}
},
工具提示:{
headerFormat:“{point.key}”,
pointFormat:“{series.name}:”+
“{point.y:.1f}mm”,
页脚格式:“”,
分享:是的,
useHTML:true
},
打印选项:{
专栏:{
点填充:0.2,
边框宽度:0
}
},
系列:[{
名称:"东京",,
数据:[49.9,0,106.4129.2,144.0,176.0,135.6148.51216.4194.1,95.6,54.4]
},{
名称:'纽约',
数据:[83.6,78.8,98.5,0,106.0,84.5,105.0,104.3,91.2,83.5,106.6,92.3]
},{
名称:“伦敦”,
数据:[48.9,38.8,39.3,41.4,47.0,48.3,59.0,59.6,52.4,65.2,0,51.2]
}, {
名称:“柏林”,
数据:[42.4,0,34.5,39.7,52.6,75.5,57.4,60.4,47.6,0,46.8,51.1]
}]
});
通过禁用分组
,为每个点创建一个单独的序列并对其应用点放置
,可以实现此外观和行为<代码>点放置只能用于系列对象-这就是分解的原因
下面是一段自动执行此操作的代码:
load: function() {
var newSeriesArr = [],
chart = this,
groupedSeries = {},
pointOffset;
// create a new series for each point
for (var i = chart.series.length - 1; i >= 0; i--) {
var series = chart.series[i];
var pointsInSeries = series.points.length;
for (var j = pointsInSeries - 1; j >= 0; j--) {
var point = series.points[j];
// omit the point if its y value equals to 0
if (!point.y) {
continue;
}
// make sure that x property of each point is initialized
point.options.x = point.x;
var newSeriesOptions = {
data: [point.options],
// move relevant options from the original series
color: series.color,
name: series.name,
// linking series items in legend
linkedTo: series.options.id
};
if (!groupedSeries[point.x]) {
// create group
groupedSeries[point.x] = [];
}
// create series and assign it to group
groupedSeries[point.x].push(chart.addSeries(newSeriesOptions, false));
if (groupedSeries[point.x].length > maxGroupedColumns) {
// update max grouped columns number
maxGroupedColumns = groupedSeries[point.x].length;
}
point.remove(false);
}
//series.remove(false);
series.setData([]);
}
// handle pointPlacement for each series
pointOffset = 1 / maxGroupedColumns;
for (var x in groupedSeries) {
var group = groupedSeries[x];
group.forEach(function(series, index) {
series.update({
pointPlacement: pointOffset * index - ((group.length - 1) * pointOffset) / 2,
}, false);
});
}
chart.redraw();
}
现场演示:这是期望的结果吗?:非常感谢……)这对我有很大帮助@KamilKulig@KamilKulig我应用了这个逻辑,注意到如果系列数据的最后一个值为0,它不会在轴的底部显示该名称。请参阅:(东京不在那里)我们能做些什么吗?我发布了一个固定的示例作为答案。它按照我的要求工作。谢谢你的帮助@kamilkulig
load: function() {
var newSeriesArr = [],
chart = this,
groupedSeries = {},
pointOffset;
// create a new series for each point
for (var i = chart.series.length - 1; i >= 0; i--) {
var series = chart.series[i];
var pointsInSeries = series.points.length;
for (var j = pointsInSeries - 1; j >= 0; j--) {
var point = series.points[j];
// omit the point if its y value equals to 0
if (!point.y) {
continue;
}
// make sure that x property of each point is initialized
point.options.x = point.x;
var newSeriesOptions = {
data: [point.options],
// move relevant options from the original series
color: series.color,
name: series.name,
// linking series items in legend
linkedTo: series.options.id
};
if (!groupedSeries[point.x]) {
// create group
groupedSeries[point.x] = [];
}
// create series and assign it to group
groupedSeries[point.x].push(chart.addSeries(newSeriesOptions, false));
if (groupedSeries[point.x].length > maxGroupedColumns) {
// update max grouped columns number
maxGroupedColumns = groupedSeries[point.x].length;
}
point.remove(false);
}
//series.remove(false);
series.setData([]);
}
// handle pointPlacement for each series
pointOffset = 1 / maxGroupedColumns;
for (var x in groupedSeries) {
var group = groupedSeries[x];
group.forEach(function(series, index) {
series.update({
pointPlacement: pointOffset * index - ((group.length - 1) * pointOffset) / 2,
}, false);
});
}
chart.redraw();
}