读取CSV文件并使用Surf绘制时间序列数据

时间:2013-09-08 22:25:23

标签: matlab csv

我有3个csv文件,其中包含坐标X,Y和Z resp。我试图使用冲浪功能在matlab中绘制它们。这些坐标是根据时间记录的,

例如。 FirstX.csv,包含,

                                 10,20,30
                                 20,30,40
                                 20,30,40

此文件中的每一行都是X坐标,而不是记录时间。 类似于FirstY.csv和FirstZ.csv

我尝试了类似下面的内容,

X=csvread(FirstX.csv)
Y=csvread(FirstY.csv)
Z=csvread(FirstZ.csv)

surf(X,Y,Z)

错误地说“数据维度必须同意”

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您会在matlab help page here找到答案。我重现下面的相关示例。您必须为每个时间点重复这些步骤。

使用X,Y,Z向量实现表面图的许多解决方案之一是:

- 生成[-8,8]范围内的不均匀采样数据并用它来评估函数:

x = rand(100,1)*16 - 8;
y = rand(100,1)*16 - 8;
r = sqrt(x.^2 + y.^2) + eps;
z = sin(r)./r;

- linspace函数提供了一种方便的方法来创建具有所需数量元素的均匀间隔数据。以下语句生成随机数据范围内的向量,其分辨率与前一个sinc示例中-8:.5:8语句生成的分辨率相同:

xlin = linspace(min(x),max(x),33);
ylin = linspace(min(y),max(y),33);

- 使用这些点生成均匀间隔的网格:

[X,Y] = meshgrid(xlin,ylin);

- 此过程的关键是使用scatInterpolant根据原始数据点处的函数值(在此示例中是随机的)在均匀间隔点处插入函数的值。该语句使用默认线性插值来生成新数据:

f = scatteredInterpolant(x,y,z);
Z = f(X,Y);

- 绘制插值和非均匀数据以产生:

figure
mesh(X,Y,Z) %interpolated
axis tight; hold on
plot3(x,y,z,'.','MarkerSize',15) %nonuniform

您也可以使用来自文件交换的matlab函数griddataTriScatteredInterpgridfit - 新引入的matlab函数{{1}是最先进的解决方案。