Node-RED仪表板图表生成函数故障排查求助
Node-RED图表生成问题修复方案
代码中的核心问题
- 变量拼写错误:
inpuy_data→input_data;input_data[int]→input_data[inp] - 未重置临时数组:
year2017每次循环后未清空,导致不同产品的数据累加混淆 - 匹配逻辑错误:用空数组
data[inp]匹配Product,应直接使用input_data[inp] - 未处理年份筛选:未结合按钮选择的年份过滤原始数据
修正后的函数代码
// 获取用户输入的产品列表 var input_data = context.global.input_data; // 从按钮传递的消息中获取选中的年份(根据你的按钮配置调整,示例用msg.topic存储年份) var selectedYear = msg.topic; var seriesData = []; var productNames = input_data; // 直接用输入的产品名作为系列名称 // 遍历每个输入的产品 input_data.forEach(function(product) { var productData = []; // 筛选对应产品和选中年份的有效数据 msg.payload.forEach(function(item) { if (item.Product === product && item.Year == selectedYear && item.Energy) { productData.push({ x: product, y: item.Energy }); // 若为按年份趋势的折线图,可改为: // productData.push({ x: item.Year, y: item.Energy }); } }); seriesData.push(productData); }); // 组装图表所需格式 msg.payload = [{ series: productNames, // 填入用户输入的产品名称数组,如["产品A", "产品B"] data: seriesData, // 每个产品对应的数据集合 labels: [selectedYear] // 填入选中的年份,多年份场景可提取所有唯一年份数组 }]; return msg;
series和labels的填写说明
- series:对应图表的系列名称,直接使用用户输入的产品名称数组(
input_data)。比如用户输入"产品X"和"产品Y",series就填["产品X", "产品Y"],图表会生成对应两个系列的图形。 - labels:根据图表类型调整:
- 单年份统计(如柱状图对比产品能耗):填选中的年份数组,如
["2017"] - 多年份趋势(如折线图展示年度变化):提取原始数据中所有唯一的年份数组,如
["2017", "2018", "2019"]
- 单年份统计(如柱状图对比产品能耗):填选中的年份数组,如
额外注意事项
- 确保按钮选择的年份能正确传递到函数节点,比如将按钮的
msg.topic设为年份值(如"2017") - 若用户输入的产品是逗号分隔的字符串,需先转为数组:
input_data = context.global.input_data.split(",").map(item => item.trim())
内容的提问来源于stack exchange,提问作者Ekisha
相关产品推荐
相关产品推荐

