Create contour plot from scatter plot
조회 수: 82 (최근 30일)
이전 댓글 표시
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
채택된 답변
Voss
2024년 4월 23일
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
추가 답변 (2개)
Mathieu NOE
2024년 4월 23일
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
Mathieu NOE
2024년 4월 23일
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
2024년 4월 23일
댓글 수: 3
Mathieu NOE
2024년 4월 24일
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
2024년 4월 24일
so you probably should stick with the solution based on scatteredInterpolant
참고 항목
카테고리
Help Center 및 File Exchange에서 Contour Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!