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

如何为柱状图注释水平线添加显示条件(仅展示至前一日)

解决方案

当然可以给annotations添加显示条件,只需要在reduce循环里加入判断逻辑,只在符合条件的索引下生成水平线即可。根据你的需求“仅展示至周二(前一日)”,可以通过以下两种方式实现:

方式一:按索引限制(假设周二是倒数第二个元素,当前为周三)

如果weeklylabels数组最后一个元素是当前日期(比如周三),只需排除最后一个元素的线条生成:

let daytarget = WeeklyData.map((y) => y.DayTarget);

var annotations = daytarget.reduce(function (acc, cur, i) {
    // 仅为前一日及之前的日期生成水平线(排除最后一个元素)
    if (i < daytarget.length - 1) {
        acc[`line${i}`] = {
            type: 'line',
            yMin: cur,
            yMax: cur,
            xMin: -0.15 + i,
            xMax: 0.15 + i,
            borderColor: 'white',
            borderWidth: 10,
        }
    }
    return acc;            
}, {});

// 其余代码保持不变
var barChartDataWeekly = {
    labels: weeklylabels,
    datasets: [
        {
            data: WeeklyData,
            backgroundColor: function (value, context) {   
                if (value.raw.TotalActual >= value.raw.DayTarget) {
                    return 'rgba(0, 154, 221, 1)';
                } else {
                    return 'rgba(176, 35, 25, 1)';
                }
            }
        }
    ],
};

方式二:按标签名称精准匹配(直接指定周二)

如果需要严格匹配“周二”这个标签,不管它在数组中的位置,可以通过weeklylabels[i]判断:

let daytarget = WeeklyData.map((y) => y.DayTarget);

var annotations = daytarget.reduce(function (acc, cur, i) {
    // 仅为周二及之前的日期生成水平线
    const currentLabel = weeklylabels[i];
    // 假设标签文本是“周二”,可根据实际情况调整
    if (currentLabel === '周二' || i < weeklylabels.indexOf('周二')) {
        acc[`line${i}`] = {
            type: 'line',
            yMin: cur,
            yMax: cur,
            xMin: -0.15 + i,
            xMax: 0.15 + i,
            borderColor: 'white',
            borderWidth: 10,
        }
    }
    return acc;            
}, {});

// 其余代码保持不变
var barChartDataWeekly = {
    labels: weeklylabels,
    datasets: [
        {
            data: WeeklyData,
            backgroundColor: function (value, context) {   
                if (value.raw.TotalActual >= value.raw.DayTarget) {
                    return 'rgba(0, 154, 221, 1)';
                } else {
                    return 'rgba(176, 35, 25, 1)';
                }
            }
        }
    ],
};

两种方式都能实现“仅展示至周二(前一日)”的需求,你可以根据自己的weeklylabels数组结构选择合适的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:47:25