Octave 3D 网格,来自文件的数据

计算科学 matlab 八度 3d
2021-12-10 09:16:52

我有一个包含 3 列的大文件:密度、维度、值。
例子:

10 0.3 200  
10 0.4 300  
20 0.3 250  
20 0.4 320  
...  

我正在尝试绘制一个 3d 图 - 具有mesh()八度函数的网格,如下所示:

data = load ("file.txt");  
mesh(data(:,1), data (:,2), data (:,3));

我遇到的问题是,我总是收到错误:

rows (z) must be the same as length (y), columns (z) must be the same as length (x).

它适用于 function plot3(),但我想要一种网格状的情节。

2个回答

mesh函数绘制函数z=f(x,y)所以要调用这个mesh()函数,你必须有二维数据。x您可以为和提供向量y,但z必须是具有length(x)行和length(y)列的数组,或者x必须都是相同大小的二维数组。您的数据已被提取到一个长向量中,您需要对其进行二维化。yz

我相信该reshape功能会满足您的需求。例如:

x=reshape(数据(:,1),m,n);
y=reshape(数据(:,2),m,n);
z=reshape(数据(:,3),m,n);
网格(x,y,z);

数据中适当维度m以及数据的适当维度。nxy

另一种方法可能是:

调用您的 3 个数据向量 aa、bb、cc 并假设 aa 和 bb 表示平面上的一个点,而 cc 是该平面上方的高度。

创建网格:

x_plot = linspace(min(aa),max(aa),100);
y_plot = linspace(min(bb),max(bb),100);
[XI,YI] = meshgrid(x_plot,y_plot);

创建插值:

ZI = griddata(aa,bb,cc,XI,YI);

和情节

figure()
mesh(XI,YI,ZI)