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

如何基于数值区间为C3.js时间序列图表着色?

问题

刚接触C3.js库,需要绘制时间序列图表,并根据数值区间为数据着色。数据通过PHP查询后以JSON形式获取,已将日期和值分别存入数组,当前绘制图表的代码如下。

JSON数据示例:

  • 日期数组:['x', '2022-05-01', '2022-05-02', ..., '2022-05-21']
  • 数值数组:['Values', '0.0249', '0.0163', ..., '0.0011']

需求:按以下区间为数据着色:

  • 值小于0.3为绿色
  • 0.3到0.6之间为黄色
  • 大于0.6为红色

曾尝试在PHP中创建3组日期和数值数组,但无法在图表中正确展示(单个日期对应多个值不符合数据唯一性),请问如何实现按区间着色?

当前图表代码:

let xData = (data.date);
let yData = (data.value);

xData.unshift('x');
yData.unshift('Values');
var chart7 = c3.generate({
    bindto: '#chart7',
    data: {
        x:'x',
        xFormat: '%Y-%m-%d',
        columns:[xData,yData],
        type: 'bar'
    },
    axis: {
        x:{label:{text:'Date',position:'outer-center'},type: 'timeseries',tick:{format: '%Y-%m-%d'}}
    },
    point: {show: true},
    zoom: {enabled: true},
    legend: {show: false},
    color: {pattern: ['#b7b485', '#0E6A40', '#B73540', '#B73540']},
    padding: {top:5,right:5,bottom:5,left:30},
    size:{height:240}
});

解决方案

不用拆分数据数组,直接利用C3.js的color配置项中的函数回调,根据每个数据点的数值动态返回对应颜色即可,具体修改如下:

修改后的完整代码

let xData = data.date;
let yData = data.value;

xData.unshift('x');
yData.unshift('Values');
var chart7 = c3.generate({
    bindto: '#chart7',
    data: {
        x:'x',
        xFormat: '%Y-%m-%d',
        columns:[xData,yData],
        type: 'bar'
    },
    axis: {
        x:{label:{text:'Date',position:'outer-center'},type: 'timeseries',tick:{format: '%Y-%m-%d'}}
    },
    point: {show: true},
    zoom: {enabled: true},
    legend: {show: false},
    // 核心逻辑:通过函数动态匹配颜色
    color: function (color, d) {
        // 将字符串类型的数值转为数字
        const value = parseFloat(d.value);
        if (value < 0.3) {
            return '#0E6A40'; // 绿色
        } else if (value >= 0.3 && value <= 0.6) {
            return '#b7b485'; // 黄色
        } else {
            return '#B73540'; // 红色
        }
    },
    padding: {top:5,right:5,bottom:5,left:30},
    size:{height:240}
});

关键说明

  • color函数的第二个参数d包含当前数据点的完整信息,d.value即为当前点的数值(注意原始数据是字符串类型,需转为数字后再做区间判断)
  • 无需拆分原数据结构,保持每个日期对应唯一值的状态,避免数据冗余和图表展示异常
  • 可直接调整颜色代码或区间阈值来适配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:25:40