How do I plot a contour map of non-uniform x,y,z data?
109 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
James Waineo
il 25 Apr 2016
Modificato: Shivam Anand
il 11 Mag 2022
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?
0 Commenti
Risposta accettata
Chad Greene
il 25 Apr 2016
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 Commenti
Hossein Sahhaf
il 11 Ott 2020
Modificato: Hossein Sahhaf
il 11 Ott 2020
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
il 27 Ott 2020
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?
Più risposte (2)
Mingta Yang
il 5 Mar 2021
If there is connectivity info for the scattered data, fill3 might be what you need. It plots filled polygons in 3D.
0 Commenti
Shivam Anand
il 11 Mag 2022
Modificato: Shivam Anand
il 11 Mag 2022
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)
0 Commenti
Vedere anche
Categorie
Scopri di più su Contour Plots in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!