You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用amCharts.js隐藏图表中的零值?附代码与解决方案

如何在amCharts.js中隐藏零值并保留分类列显示?

要实现这个需求,核心思路是利用amCharts的特性:图表会自动忽略null值,但依然保留对应的分类轴条目。所以我们只需要把数据中的零值替换为null即可,无需修改图表的复杂配置。

具体修改步骤

在你的AJAX请求成功回调中,拿到数据后先进行预处理,把所有状态字段的零值替换为null,再把处理后的数据赋值给图表。

修改后的代码片段如下:

function getStatsByFlowByOperation(){
 $.ajax({
 success: function(data) {
  // 新增:预处理数据,将零值替换为null
  const targetStatuses = ["NEW", "DISABLED", "SKIPPED", "READY"];
  data.forEach(item => {
    targetStatuses.forEach(status => {
      // 检查该状态值是否为0,是的话替换为null
      if(item[status] === 0) {
        item[status] = null;
      }
    });
  });

  // 原有的图表初始化代码继续执行
  am4core.useTheme(am4themes_material);
  chart = am4core.create("chartdiv", am4charts.XYChart);
  chart.hiddenState.properties.opacity = 0;
  chart.data = data; // 这里使用处理后的data
  chart.colors.step = 2;
  chart.padding(30, 30, 10, 30);
  chart.legend = new am4charts.Legend();
  var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());
  categoryAxis.dataFields.category = "OPERATION_NAME";
  categoryAxis.renderer.minGridDistance = 30;
  categoryAxis.renderer.grid.template.location = 0;
  categoryAxis.renderer.labels.template.rotation = 315;
  categoryAxis.renderer.labels.template.verticalCenter = "middle";
  categoryAxis.renderer.labels.template.horizontalCenter = "right";
  var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());
  valueAxis.renderer.inside = true;
  valueAxis.renderer.labels.template.disabled = true;
  valueAxis.min = 0;
  var allStatus = [];
  allStatus.push("NEW");
  allStatus.push("DISABLED");
  allStatus.push("SKIPPED");
  allStatus.push("READY");
  for(var i = 0; i < allStatus.length; i++) {
 createSeries(allStatus[i], allStatus[i]);
 }
 },
 error: function (jqXHR, exception) {
 if (globalVars.unloaded) {
 return;
 }
 manageAjaxError(jqXHR, textStatus, errorThrown);
 }
 });
}

效果说明

以你提供的输入数据示例为例:

原数据:[{ "READY": 0, " ": 1, "OPERATION_NAME": "INIT", "STEP": 1 }]

经过处理后,数据会变成:
[{ "READY": null, " ": 1, "OPERATION_NAME": "INIT", "STEP": 1 }]

此时图表渲染时,INIT分类列依然会显示在X轴上,但READY系列对应的零值柱形会被隐藏,完全符合你的需求。

为什么这个方案有效?

amCharts在绘制系列时,遇到null值会跳过该数据点的绘制,但不会移除对应的分类轴条目,这样既隐藏了零值的可视化,又保证了分类列的完整性,是最简洁高效的实现方式。

内容的提问来源于stack exchange,提问作者Majestic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:19:15