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

MATLAB绘制时间-风速散点图报错:输入参数需为数值型

解决MATLAB散点图绘制的数值转换问题

嘿,我来帮你捋捋这个问题!你现在遇到的核心问题是表格列的类型没转对,而且时间字符串没法直接给scatter用,咱们一步步来解决:

首先,先看你遇到的报错:

Error using scatter (line 55) Input arguments must be numeric or objects which can be converted to double.
Error in windconversions (line 18) scatter(time,wnd_TS)

这个报错很明确:scatter的X、Y轴都得是数值型,但你传的time和wnd_TS都是表格的列对象(不是纯数组),而且time还是字符串类型,自然转不了double。

再看你的代码问题:你写了table2array(wnd_TS);但没把转换后的结果赋值给新变量!所以wnd_TS还是原来的表格列,等于白转了。

具体解决步骤

1. 正确提取并转换风速数据

你可以直接用圆点索引提取表格里的数值列,或者转换后赋值:

T = readtable('allunderway.txt', 'HeaderLines', 2); 
% 方法一:直接用列名提取(如果你的表格有列名,比如WND_TS)
wnd_TS_num = T.WND_TS;
% 方法二:如果是默认列名(比如Var11),用索引提取后转数组
wnd_TS_num = table2array(T(:,11));

用class(wnd_TS_num)检查一下,结果是double类型就对了。

2. 把时间字符串转成数值型

字符串时间没法直接绘图,得转成MATLAB能识别的数值,这里给你两种常用方法:

方法一:转成日期时间对象再转成序列号

如果你的日期和时间是分开的两列,先合并成完整的时间字符串,再转成datetime,最后转成数值序列号:

% 合并日期和时间列(假设日期列是Var1,时间列是Var2,根据你的表格调整)
full_time_str = strcat(T.Var1, ' ', T.Var2);
% 转成datetime对象,注意InputFormat要匹配你的数据格式(比如截图里的日期是yyyy-MM-dd,时间是HH:mm:ss)
time_datetime = datetime(full_time_str, 'InputFormat', 'yyyy-MM-dd HH:mm:ss');
% 转成数值型的日期序列号
time_num = datenum(time_datetime);
方法二:只转一天内的秒数(如果不需要完整日期)

如果你的数据都是同一天的,或者只关心当天的时间变化,可以把时间转成一天内的秒数:

% 提取时间字符串列
time_str = T.Var2;
% 转成持续时间对象
time_duration = duration(time_str);
% 转成秒数(数值型)
time_num = seconds(time_duration);

3. 绘制散点图

现在用转换后的数值型数据绘图:

scatter(time_num, wnd_TS_num);
xlabel('时间(秒)'); % 或者如果用了日期序列号,改成'时间(日期序列号)'
ylabel('风速');
% 要是用了datetime对象,其实也可以直接传进去,scatter支持datetime类型:
% scatter(time_datetime, wnd_TS_num);

额外小提示

  • 用readtable时,可以加上ReadVariableNames=true(默认就是),这样如果你的数据文件第三行(跳过2行后)是列名,就可以直接用T.DATE、T.TIME这种更直观的方式取列,不用记索引。
  • 转换前用class()查看变量类型,比如class(T(:,2)),能帮你快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:53:55