如何在Octave/MATLAB中用给定的数据点绘制二维等高线图?

如何在Octave/MATLAB中用给定的数据点绘制二维等高线图?,matlab,plot,octave,Matlab,Plot,Octave,我有一个矩阵,它的三列对应于x,y和f值。我想用Octave/MATLAB从这些数据在x,y平面上绘制一个f(x,y)的等高线图 比方说,矩阵M是 x1 y1 f1 x2 y2 f2 x3 y3 f3 . . . . . . 我发现函数要求f是一个矩阵(而我有一个带有相应点的向量) 如何生成此图?传递给contourf的x、y和z变量都是相同大小的矩阵。对于每个点,都需要一个x、y和z值。您可以使用meshgrid生成具有x和y值的所有组合的矩阵 此示例来自contourf的文档。我添

我有一个矩阵,它的三列对应于x,y和f值。我想用Octave/MATLAB从这些数据在x,y平面上绘制一个f(x,y)的等高线图

比方说,矩阵
M

x1 y1 f1
x2 y2 f2
x3 y3 f3
.  .  .
.  .  .
我发现函数要求
f
是一个矩阵(而我有一个带有相应点的向量)


如何生成此图?

传递给
contourf
x
y
z
变量都是相同大小的矩阵。对于每个点,都需要一个
x
y
z
值。您可以使用
meshgrid
生成具有x和y值的所有组合的矩阵

此示例来自
contourf
的文档。我添加了一些评论来解释正在发生的事情

% Create a vector of x values
x = linspace(-2*pi,2*pi);
% Create a vector of y values 
y = linspace(0,4*pi);
% Make matrices with all combinations of x and y values for plotting
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);
contourf(X,Y,Z)
这是上述代码的结果

我知道如何为x,y制作网格,但我只有与数据中特定的
(x,y)
相对应的
z
(或
f
)值。我不能写类似于Z=sin(X)+cos(Y),my
z
不是矩阵。我只有一个(x,y,z)列表,假设你有x和y的所有组合,也许你可以使用整形函数将x,y和z值转换成矩阵。一般来说,在这种情况下,你最好的选择是在标准ndgrid上插值你的实际值,然后将其传递给相关的曲面绘制函数。