Create contour plot from scatter plot
99 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I want to create a contour from this matrix with x,y and z data. x is the length, y is the width and z is the deviatoric strain.
I want to create a contour plot instead. Is that possible?
figure; hold on ; box on
scatter(x,y,[20],-z,'filled')
ylabel('Width, \ $(\mathrm{m})$','FontSize',15); xlabel('Length, \ $(\mathrm{m})$','FontSize',15,'FontName','times')
0 commentaires
Réponse acceptée
Voss
le 23 Avr 2024
M = readmatrix('k.txt');
x = M(:,1);
y = M(:,2);
z = M(:,3);
I = scatteredInterpolant(x,y,z);
N = 80;
X = linspace(min(x),max(x),N);
Y = linspace(min(y),max(y),N);
[X,Y] = meshgrid(X,Y);
Z = I(X,Y);
contour(X,Y,Z)
colorbar
6 commentaires
Plus de réponses (2)
Mathieu NOE
le 23 Avr 2024
hello
sure you can do that
notice that I needed to create lot of levels to display the outer contour line because your z data is highly concentrated in the lower portion of the range (we can see that by plotting a histogram)
data = readmatrix('k.txt');
x = data(:,1);
y = data(:,2);
z = data(:,3);
histogram(z,200)
% Interpolate the scattered data
xd = linspace(min(x),max(x),100);
yd = linspace(min(y),max(y),100);
v = linspace(min(z),max(z),200); % define the levels for the contour plot
[xq,yq] = meshgrid(xd,yd);
zq = griddata(x,y,z,xq,yq);
% replace NaN's generated by griddate with 0 (or a value lower than min(z)
zq(isnan(zq)) = 0;
% contour plot
[c,h] = contour(xq,yq,zq,v);
grid on
axis square
2 commentaires
Mathieu NOE
le 23 Avr 2024
this could be an alternative , with less contour lines
now the levels are generated with a log scale
and I use clabel to show what are the corresponding z value
data = readmatrix('k.txt');
x = data(:,1);
y = data(:,2);
z = data(:,3);
% Interpolate the scattered data
xd = linspace(min(x),max(x),100);
yd = linspace(min(y),max(y),100);
% v = linspace(min(z),max(z),200); % define the levels for the contour plot
v = logspace(log10(min(z)),log10(max(z)),10);
[xq,yq] = meshgrid(xd,yd);
zq = griddata(x,y,z,xq,yq);
% replace NaN's generated by griddate with 0 (or a value lower than min(z)
zq(isnan(zq)) = 0;
% contour plot
[c,h] = contour(xq,yq,zq,v);
grid on
axis square
clabel(c,h,v,'LabelSpacing',3000,'Color','b','FontWeight','bold')
colorbar('vert')
Walter Roberson
le 23 Avr 2024
3 commentaires
Mathieu NOE
le 24 Avr 2024
It works on my side but with tricontour I don't know how you can manage to keep the inner hole
data = readmatrix('k.txt');
x = data(:,1);
y = data(:,2);
z = data(:,3);
% v = linspace(min(z),max(z),20); % define the levels for the contour plot
v = logspace(log10(min(z)),log10(max(z)),50);
tri=delaunay(x,y); % triangulate scattered data
[C,h]=tricontour(tri,x,y,z,v);
% clabel(C,h)
colormap('jet');
grid on
axis square
% clabel(c,h,v,'LabelSpacing',3000,'Color','b','FontWeight','bold')
colorbar('vert')
Mathieu NOE
le 24 Avr 2024
so you probably should stick with the solution based on scatteredInterpolant
Voir également
Catégories
En savoir plus sur Contour Plots dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!