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

使用ApexChart Heatmap实现GitHub式贡献图的配色与阈值设置问题

解决ApexChart热力图实现GitHub贡献图样式的问题

需求说明

我希望用ApexChart的Heatmap制作类似GitHub贡献图的热力图,核心需求:

  • 数值越高,颜色从灰色过渡到蓝色
  • 设置颜色范围上限,达到一定贡献值后颜色不再加深
  • 避免低数值视觉上与0值混淆(少量贡献需明显区别于0)

尝试配置colorScale但未成功,当前图表配置代码如下:

const chartOptions = {
    chart: {
      type: "heatmap",
      animations: {
        enabled: false,
      },
      redrawOnWindowResize: false,
      selection: {
        enabled: false,
      },
    },

    plotOptions: {
      heatmap: {
        radius: 5,
      },
    },
    dataLabels: {
      enabled: false
    },

    colors: ["#008FFB"],
    stroke: {
      colors: ["#D3D3D3"],
      width: 2,
    },
    title: {
      text: "User Contributions",
    },

    xaxis: {
      type: "datetime",
      labels: {
        format: "MMM",
        showDuplicates: false,
      },
    },
  };

// ...

return (
    <div>
      <div id="chart">
        <ReactApexChart
          options={chartOptions}
          series={chartData}
          type="heatmap"
          height={280}
          width={1200}
        />
      </div>
      <div id="html-dist"></div>
    </div>
  );

当前问题:所有非0值均为单一蓝色,无法区分贡献多少,且低数值与0值视觉差异不明显,没有渐变效果。


解决方案

核心是正确配置plotOptions.heatmap.colorScale,同时单独处理0值颜色,以下是修改后的完整配置:

const chartOptions = {
  chart: {
    type: "heatmap",
    animations: {
      enabled: false,
    },
    redrawOnWindowResize: false,
    selection: {
      enabled: false,
    },
  },

  plotOptions: {
    heatmap: {
      radius: 5,
      // 核心颜色刻度配置
      colorScale: {
        ranges: [
          {
            from: 0,
            to: 0,
            color: "#f1f3f4" // 0值专属浅灰色,彻底区分无贡献项
          },
          {
            from: 1,
            to: 3,
            color: "#e3f2fd" // 低贡献值浅蓝
          },
          {
            from: 4,
            to: 7,
            color: "#bbdefb" // 中贡献值中蓝
          },
          {
            from: 8,
            to: Infinity, // 贡献值上限,超过该值颜色不再变化
            color: "#0d47a1" // 高贡献值深蓝
          }
        ]
      }
    },
  },
  dataLabels: {
    enabled: false
  },

  stroke: {
    colors: ["#ffffff"], // 白色边框,贴近GitHub视觉风格
    width: 2,
  },
  title: {
    text: "用户贡献图",
  },

  xaxis: {
    type: "datetime",
    labels: {
      format: "MMM",
      showDuplicates: false,
    },
  },
};

// ...

return (
  <div>
    <div id="chart">
      <ReactApexChart
        options={chartOptions}
        series={chartData}
        type="heatmap"
        height={280}
        width={1200}
      />
    </div>
    <div id="html-dist"></div>
  </div>
);

关键修改说明

  1. 移除全局colors配置:colorScale.ranges会完全接管颜色映射,无需全局颜色设置
  2. 0值单独配色:将0值设为浅灰色,确保有贡献的单元格(哪怕数值为1)都能和无贡献项明显区分
  3. 梯度颜色过渡:分区间设置从浅到深的蓝色,实现数值越高颜色越深的效果
  4. 颜色上限控制:最后一个区间用Infinity作为结束值,所有超过阈值的单元格统一使用最深色,避免颜色无限加深
  5. 优化边框样式:改用白色边框,更贴近GitHub贡献图的视觉体验

自定义调整

如果你的贡献值范围和示例不同,只需修改colorScale.ranges中的from和to数值即可,比如将上限从8调整为你需要的阈值(如10、15)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:56:12