How do I plot a contour map of non-uniform x,y,z data?

112 ビュー (過去 30 日間)
James Waineo
James Waineo 2016 年 4 月 25 日
編集済み: Shivam Anand 2022 年 5 月 11 日
I have data points that each have an x position, a y position, and a height. The points are not uniformly spaced or in a specific order. Scatter3 plots the data fine, but I need to make a contour plot of the heights. Contour and contour3 seem to require a full, evenly spaced n x m array of points for x, y, and z, but I don't have that. From what I read, meshgrid should be used to interpolate the data, but I can't get it to work. I can create a grid for x and y, but the z (height) values don't line up with any of the new grid points. Can someone describe how to do this?

採用された回答

Chad Greene
Chad Greene 2016 年 4 月 25 日
Hi James,
This is a common problem with scattered data. What you have are some real measurements (plus noise) at a few locations, and the first step you need to do is to create some data everywhere you don't actually have data. I want to stress that all gridded or contoured data are effectively made up, based on a few real measurements (plus noise). But you can be thoughtful about how to fill in everywhere you don't actually have data.
Matlab has a function called griddata and another called scatteredInterpolant, but I've never been very impressed with them. John D'Errico's gridfit, on the other hand, is computationally efficient and quite easy to use. You'll have to tune the smoothing parameter to match your data the way you'd like it to.
After you've gridded your data, contour will be easy to use.
  6 件のコメント
Hossein Sahhaf
Hossein Sahhaf 2020 年 10 月 11 日
編集済み: Hossein Sahhaf 2020 年 10 月 11 日
Hi Chad
Thanks for your good offers. I had a problem like that James was encountered with. I used the griddata function after reading your answer and my problem was solved.
Thanks a lot!
Abdallah Ghazal
Abdallah Ghazal 2020 年 10 月 27 日
Hi, Please correct me if I am wrong, does not 'meshgrid' generate uniform mesh? How did 'gridfit' solved the issue of non-uniformely gridded data?

サインインしてコメントする。

その他の回答 (2 件)

Mingta Yang
Mingta Yang 2021 年 3 月 5 日
If there is connectivity info for the scattered data, fill3 might be what you need. It plots filled polygons in 3D.

Shivam Anand
Shivam Anand 2022 年 5 月 11 日
編集済み: Shivam Anand 2022 年 5 月 11 日
x=[32 20 67 1 98 34 57 65 24 82 47 55 8 51 13 14 18 30 37 39 10 33 21 26 38 81 83 60 95 22 17 5 72 46 99 52 12 25 96 29 70 85 43 69 19 78 97 31 89 53 2 91 48 71 61 15 36 84 94 50 11 80 6 7 49 74 9 88 40 79 27 68 73 64 63 59 86 23 35 58 45 28 100 42 93 87 16 90 41 66 54 92 77 4 62 76 75 56 3 44];
y=[96 75 24 9 83 49 27 77 3 23 17 31 40 13 7 52 51 21 98 47 64 79 78 91 44 16 15 100 84 99 63 68 70 30 54 76 97 73 33 5 88 8 71 66 62 25 60 42 72 45 18 11 28 59 89 65 10 55 69 81 12 26 20 95 87 41 74 50 93 22 43 90 14 34 82 35 56 38 80 32 1 57 6 36 37 61 29 58 2 48 4 46 67 53 92 86 94 19 39 85];
z=[55 31 11 45 83 36 86 49 15 57 42 46 8 94 88 47 54 81 98 41 32 35 56 85 9 89 37 60 23 62 67 100 78 76 73 80 10 20 68 34 77 93 1 63 53 12 22 99 91 40 84 24 33 3 43 19 92 97 6 82 64 25 26 79 95 4 44 58 5 21 70 29 65 87 96 90 51 14 18 2 72 28 71 39 52 7 27 59 50 61 48 30 66 69 17 13 74 16 75 38];
xlin = linspace(min(x), max(x), 100);
ylin = linspace(min(y), max(y), 100);
[X,Y] = meshgrid(xlin, ylin);
% Z = griddata(x,y,z,X,Y,'natural');
% Z = griddata(x,y,z,X,Y,'cubic');
Z = griddata(x,y,z,X,Y,'v4');
mesh(X,Y,Z)
axis tight; hold on
plot3(x,y,z,'.','MarkerSize',15)

カテゴリ

Help Center および File ExchangeContour Plots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by