Mesh function creates extra face joining first and final data points

조회 수: 1 (최근 30일)
Hi,
I have data for three variables and I have use mesh function to draw a 3d chart.
I have used the following code,
"
[X,Y]=meshgrid(vx,vz)
Z=griddata(vx,vz,astrain,X,Y)
mesh(X,Y,Z)
"
when I graph the chart, I get an extra face with joining the first and last data point
How can I avoid this?
PS: I'm new to Matlab.

채택된 답변

Star Strider
Star Strider 2022년 4월 5일
Try something like this —
vxv = linspace(min(vx), max(vx), numel(vx));
vzv = linspace(min(vz), max(vz), numel(vz));
[X,Y]=meshgrid(vxv,vzv)
Z=griddata(vx,vz,astrain,X,Y)
figure
mesh(X,Y,Z)
grid on
The problem is likely in the original ‘vx’ and ‘vz’ vectors. Creating different version of them to create the interpolation matrices may solve this.
I do not have the necessary data to test this, so I am posting it as UNTESTED CODE.
.
  댓글 수: 2
Rashiga Walallawita Walallawita Kankanamge
편집: Rashiga Walallawita Walallawita Kankanamge 2022년 4월 5일
@Star Strider this code worked! Many thanks.
Could you kindly explain why did you use this code?
vxv = linspace(min(vx), max(vx), numel(vx));
Star Strider
Star Strider 2022년 4월 6일
As always, my pleasure!
Sure!
The original vectors were apparently not monotonically-increasing, causing the problem that your reported.
My code creates a monotonically-increasing vector spanning the range of each original vector (and with the same number of elements, although that is simply for convenience, since the third argument to linspace can be anything reasonable), avoiding the problems of it not being monotonically increasing, that is usually the cause of ‘wrap-around’ problems like those you reported. It then creates appropriate interpolation matrices with the same properties.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by