Surface plots inside loop
이전 댓글 표시
Hi,
I am working on a code that approximates a general bivariate function using a piecewise linear bivariate function. I am able to retrieve the data and plot it, my code works as follows:
It plots one subdomain at a time, as a surface plot. The plot is put inside a loop and so during each, iteration a new subdomain is plotted.
The issue here is that the final plot is displayed with discontinuities as shown in the figure attached.

Kindly help me remove those discontinuities, so as to make the final plot solid or suggest any alternate idea that would work.
채택된 답변
추가 답변 (3개)
KSSV
2019년 8월 19일
YOu can follow a samll demo code given here:
[X,Y,Z] = peaks(100) ;
surf(X,Y,Z)
%% Make surface discontinuous for demo
idx = meshgrid(10:10:100) ;
for i = 1:idx
Z(idx(:,i),:) = NaN ;
Z(:,idx(:,i)) = NaN ;
end
surf(X,Y,Z)
%% Have a continuous (x,y,z) data
idx = ~isnan(Z) ;
c = [X(idx) Y(idx) Z(idx)] ;
%% Make c continuous
x = c(:,1) ; y = c(:,2) ; z = c(:,3) ;
xi = linspace(min(x),max(x),100) ;
yi = linspace(min(y),max(y),100) ;
[X,Y] = meshgrid(xi,yi) ;
Z = NaN(size(X)) ;
% get nearest neighbors of new X, Y from (x,y)
idx = knnsearch([X(:) Y(:)],[x y]) ;
Z(idx) = z ;
%% fill gaps by interpolation
F = scatteredInterpolant(x,y,z) ;
idx = isnan(Z) ;
Z(idx) = F(X(idx),Y(idx)) ;
figure
surf(X,Y,Z)
YOu can also use griddata, fillgaps, fillmissing.
댓글 수: 3
Mahesh M S
2019년 8월 19일
편집: Mahesh M S
2019년 8월 19일
darova
2019년 8월 19일
i can extract it for you
Mahesh M S
2019년 8월 19일
Mahesh M S
2019년 8월 19일
편집: Mahesh M S
2019년 8월 19일
Bruno Luong
2019년 8월 20일
편집: Bruno Luong
2019년 8월 20일
Assuming your xdata and ydata are sorted. My code doest not make new resampling of x and y, or interpolation, I just stitch them together

% Read your data
xdata = xlsread('debug.xlsx','B1:U4');
ydata = xlsread('debug.xlsx','B6:U9');
X{1} = xdata(1,:); X{2} = xdata(2,:); X{3} = xdata(3,:); X{4} = xdata(4,:);
Y{1} = ydata(1,:); Y{2} = ydata(2,:); Y{3} = ydata(3,:); Y{4} = ydata(4,:);
F{1} = xlsread('debug.xlsx','B11:U30');
F{2} = xlsread('debug.xlsx','B32:U51');
F{3} = xlsread('debug.xlsx','B53:U72');
F{4} = xlsread('debug.xlsx','B74:U93');
% Stitching the sub-rectangule data
Xu = unique([X{:}]);
Yu = unique([Y{:}]);
Fu = nan(length(Yu),length(Yu));
for k=1:length(F)
[~,ix] = ismember(X{k},Xu);
[~,iy] = ismember(Y{k},Yu);
Fu(iy,ix) = F{k};
end
figure;
surf(Xu,Yu,Fu)
댓글 수: 6
Mahesh M S
2019년 8월 20일
Bruno Luong
2019년 8월 20일
편집: Bruno Luong
2019년 8월 20일
It's up to you. I can only work on what is available since you haven't described precisely how the data looks like.
And please DO NOT attach Excel file this is proprietary format.
Mahesh M S
2019년 8월 20일
편집: Mahesh M S
2019년 8월 20일
Bruno Luong
2019년 8월 20일
MATFILE, we are all working with MATLAB here.
Mahesh M S
2019년 8월 20일
Bruno Luong
2019년 8월 20일

load('datareqd.mat')
% Stitching the sub-rectangule data
Xu = unique([X{:}]);
Yu = unique([Y{:}]);
Fu = nan(length(Yu),length(Yu));
for k=1:length(F)
[~,ix] = ismember(X{k},Xu);
[~,iy] = ismember(Y{k},Yu);
Fu(iy,ix) = F{k};
end
Fu = fillmissing(Fu,'linear');
close all
surf(Xu,Yu,Fu)
카테고리
도움말 센터 및 File Exchange에서 Surface and Mesh Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



