Azzera filtri
Azzera filtri

contour plot based on xyz data

110 visualizzazioni (ultimi 30 giorni)
SGMukherjee
SGMukherjee il 27 Set 2018
Modificato: Adam Danz il 9 Mar 2020
I have xyz data as attached. X is longitude, y is altitude and z is electron density. For each value of longitude from 75 to 95, I have altitude values of 100 to 2000 with corresponding electron density values for each altitude. I want a colored contour plot with these data. Please help.

Risposta accettata

Star Strider
Star Strider il 27 Set 2018
Your data are gridded. You only need to reshape them into your ‘X’, ‘Y’, and ‘Z’ matrices:
D = load('data_new.txt');
[Du,D1] = unique(D(:,1));
Dd = diff(D1);
Dr = reshape(D, Dd(1), [], size(D,2));
X = Dr(:,:,1);
Y = Dr(:,:,2);
Z = Dr(:,:,3);
figure
contourf(X, Y, Z)
See the documentation on contourf (link) for details on how to customise it.
  2 Commenti
wadah mahmoud
wadah mahmoud il 8 Mar 2020
Dear Star Strider
Thank you for the providing code, I used it and it is very helpful for me but i need your assiatnce in " how to calculatethe maximum point and showing it on the plot" , if you need I will provide you a text file of values.
Thank you for assistance.
Wadah
Adam Danz
Adam Danz il 9 Mar 2020
Modificato: Adam Danz il 9 Mar 2020
"how to calculatethe maximum point and showing it on the plot"
[maxY, maxX] = find(Z == max(Z(:)));
hold on
plot(X(maxX), Y(maxY), 'rx')
If you'd like to select the entire contour that surrounds the max value, you can use getContourLineCoordinates() from the file exchange like so,
cm = contourf(X,Y,Z);
contourTable = getContourLineCoordinates(cm);
maxLevel = max(contourTable.Level);
xMaxLevel = contourTable.X(contourTable.Level == maxLevel);
yMaxLevel = contourTable.Y(contourTable.Level == maxLevel);
hold on
plot(xMaxLevel, yMaxLevel, 'r.', 'MarkerSize', 10)

Accedi per commentare.

Più risposte (1)

jonas
jonas il 27 Set 2018
Modificato: jonas il 27 Set 2018
You just need to interpolate gridded data.
xyz=dlmread('data_new.txt');
x=xyz(:,1);
y=xyz(:,2);
z=xyz(:,3);
[X,Y]=meshgrid(min(x):max(x),min(y):max(y));
Z=griddata(x,y,z,X,Y);
contour(x,y,Z)
  2 Commenti
youssef aider
youssef aider il 25 Mar 2019
works but, still gives some fluctuations
Daniyal Altaf Baloch
Daniyal Altaf Baloch il 7 Feb 2020
Hi Jonas. Your answer perfectly works except for the typo in the last line.
Instead of
contour(x,y,Z)
it should be
contour(X,Y,Z) i.e capital X and Y will work .

Accedi per commentare.

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!

Translated by