考虑数据边界的二维等高线图

9次浏览(最近30天)
arzedaily4121
arzedaily4121 2021年8月12日
回答: darova 2021年8月15日
你好,
我有一些离散数据,把x和y作为点的坐标,把每个点的强度作为z。我把它们存储在三个向量中,分别是testX, testy和testZ。我试着用这个代码做一个二维等高线图:
n = 5;
[X,Y] = meshgrid(linspace(min(testX),max(testX),n), linspace(min(testY),max(testY),n));
Z = griddata (testZ testX,暴躁的,X, Y);
绘制图表。
数字
contourf (X, Y, Z, 30岁,“LineColor”“没有”);
得到的等高线如图1所示。问题是我的数据的边界不应该是如图1所示的矩形,而应该是我在图2中绘制的。
请问如何做一个考虑数据边界的等高线图?
谢谢
2的评论
约翰D 'Errico
约翰D 'Errico 2021年8月13日
你有离散的数据点。这意味着数据之间有空格。网格数据如何知道沿着一条边的凹洞不是数据点之间要插值的另一个空间?电脑不能读懂你的思想。所以当它在定义域内插值时,只会看到一个简单的矩形。
最好的解决方案是使用能够理解非凸域几何的代码,然后在三角区域上生成等高线图。问题是,MATLAB不提供这个工具。在文件交换中可以找到一些tricontour工具,但是您需要生成该域的三角剖分。
另一种比较简单的方法是使用已经找到的三角剖分,但是将那些不在感兴趣范围内的轮廓部分划掉。为此,您只需要学习如何使用contourc生成轮廓,然后使用inpolygon(或polyhape)来击除域外的部分。

登录评论。

答案(2)

darova
darova 2021年8月15日
使用 initmesh 对网
[x, y, z] =山峰(20);
t = linspace(0, -π,20);
(xr,年)= pol2cart (t, 2);%圆的部分
X1 = [-3 -3 3 3 xr];%广场坐标
Y1 =[3 -3 -3 3年+3];%广场坐标
gd =[2;长度(x1); x1(:);日元(:));% geom描述整个曲线
dl = decsg (gd);%分解
[p, e t] = initmesh (dl);%建立一个网格
z2 = griddata (x, y, z, p(1:)、p (2:));插入Z坐标
ff。面临= t(1:3:)”;%表示每个三角形(网格)作为单独的面
ff。顶点= p ';%点
ff。facevertexcdata = z2 (:);%的颜色
ff。facecolor =的插值函数
ff。edgecolor =“没有”
补丁(ff)
平等的

Chunru
Chunru 2021年8月13日
[x, y, z] =峰(40);
H = pcolor(x, y, z);
h.EdgeColor =“没有”
%现在绘制蒙版
持有
Ps =多相([-1 -1 1 1],[3 2 2 3]);%指定你的形状
情节(ps、“FaceColor”“k”“FaceAlpha”1);

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!