MATLAB: To plot contour for an array : x,y,mass value having repeated values

arraycontourimage analysisimage processingMATLAB

I m trying to plot a contour for a array (x,y,mass2): it is huge in size . The code is :
% initialise square matrix for contour of mass
mass2=zeros(length(xyz),length(xyz));
for i=1:length(xyz)
mass2(k,k)=xyz(i);
end
m2=max((diag(mass2*1e6)));
m1=min(mean(diag(mass2*1e6)));
contourlevel = m1:((m2-m1)/3):m2; % Required contour for 10 scale to 100
contour(xyz(1,:),xyz(2,:),(log10((mass2*1e6))),contourlevel);
My code shows the following error:
Error using contour (line 55)
Vector X must be strictly increasing or strictly decreasing with no repeated values.
Error in mass_2Dplane_z (line 151)
contour(y1,z1,(log10((mass2*1e6))),contourlevel)
My proble: high time in creating the square matrix for mass, and the isue of x array no being increasing order and the repeated values

Best Answer

Is xyz a set of scattered 2D points and their corresponding z-data? If so, the crazy diagonal matrix you're building is not what you want. You have two choices to create your contour:
1) Download one of these functions, designed to contour scattered data.
tri = delaunay(xyz(:,1), xyz(:,2));
tricontour(tri, xyz(:,1), xyz(:,2), xyz(:,3), clev);
2) Interpolate the data onto a regular grid.
xg = linspace(min(xyz(:,1)), max(xyz(:,1)), 50);
yg = linspace(min(xyz(:,2)), max(xyz(:,2)), 50);
[xg,yg] = meshgrid(xg,yg);
F = scatteredInterpolant(xyz(:,1), xyz(:,2), xyz(:,3));
zg = F(xg,yg);
contour(xg,yg,zg, clev);
I prefer the former option, usually.