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

Chart.js堆叠柱状图:如何处理无对应变体的产品数据

解决Chart.js堆叠柱状图hover显示误导性0值的问题

针对你遇到的问题,核心是通过标记无效数据为null并配置Tooltip过滤规则来实现只显示产品实际存在的许可项,具体步骤如下:

1. 修改数据集生成逻辑,用null替代0

把不存在的许可项设为null(Chart.js会忽略null值的绘制,同时保持数据集长度一致):

const products = Object.keys(product_variant_sales);
const variants = ["Full", "Upgrade"];
const product_variant_sales_datasets = variants.map(variant => {
  return {
    label: variant,
    data: products.map(product => {
      return product_variant_sales[product][variant] ?? null; // 用null替换0
    }),
    backgroundColor: `rgb(38,96,137,${variant === "Full" ? 1 : 0.8})`,
  }
});

2. 配置Tooltip过滤规则

在图表初始化的options.plugins.tooltip中添加过滤逻辑,只保留有有效数据的项:

new Chart(document.getElementById("product_sales"), {
  type: 'bar',
  data: {
    labels: products,
    datasets: product_variant_sales_datasets,
  },
  options: {
    interaction: {
      intersect: false,
      mode: 'x',
      position: 'nearest',
    },
    plugins: {
      legend: {
        display: false
      },
      tooltip: {
        // 过滤掉值为null的数据集条目
        filter: (context) => context.parsed.y !== null,
        // 自定义标签格式(可选,保证显示清晰)
        callbacks: {
          label: (context) => `${context.dataset.label}: ${context.parsed.y}`
        }
      }
    },
    scales: {
      x: {
        stacked: true,
        border: {
          color: "#254b5d",
        },
        grid: {
          color: "#254b5d",
        }
      },
      y: {
        stacked: true
      }
    },
  }
});

效果说明

  • 视觉上:null值对应的柱状部分不会被绘制,堆叠效果保持正常;
  • hover交互:Tooltip只会显示当前产品实际存在的许可项,不会出现“Upgrade: 0”这类误导性内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:07:33