如何在MATLAB中使用fplot绘制Excel文件中的数据?
从Excel绘制机器数据图表的问题与修正
需求说明
读取Excel文件的Sheet2工作表,表中每列对应一台机器:
- 首行是机器名称(列标题)
- 首行下方为该机器的每日数值数据
- 为每列数据生成独立图表,图表标题使用对应机器名称
- 不使用高级函数
原代码问题分析
- 机器名称丢失:
xlsread默认只返回数值数据,首行的文本名称会被转为NaN,无法获取标题文本 - 数据存储逻辑错误:嵌套循环中重复给
tempVar{n}和tempName{i}赋值,导致数据覆盖且未正确存储名称 - 绘图函数误用:
fplot用于绘制函数曲线,不适合绘制离散的每日数据,应使用plot - 冗余操作:嵌套循环处理NaN效率低,可直接向量化替换
- 图表创建顺序错误:先绘图再创建新figure,导致最后一个图表无内容
修正后的代码
clear variables clc close all % 读取Excel原始数据(保留文本和数值) [~, ~, rawData] = xlsread('machineOutput.xlsx', 'Sheet2'); [rows, cols] = size(rawData); % 遍历每一列(每台机器) for c = 1:cols % 获取当前机器名称(首行对应列) machineName = rawData{1, c}; % 获取该机器的数值数据(从第2行开始) machineData = cell2mat(rawData(2:rows, c)); % 将NaN替换为0 machineData(isnan(machineData)) = 0; % 创建新图表 figure % 绘制数据:x轴为天数(从1到数据长度),y轴为机器数值 plot(machineData, '-o') % 设置图表标题为机器名称 title(machineName) grid on xlabel('Number of Days') ylabel('Machine Value') xlim tight end
代码说明
- 使用
xlsread的第三个输出rawData保留所有原始数据,直接提取首行的机器名称 - 用
cell2mat将单元格数据转为数值数组,方便处理 - 向量化替换NaN为0,避免嵌套循环
- 使用
plot绘制离散数据,添加-o标记更清晰展示每日数据点 - 先创建
figure再绘图,确保每个图表独立且有内容
内容的提问来源于stack exchange,提问作者NegativeZero
相关产品推荐
相关产品推荐

