Filter löschen
Filter löschen

contour plot based on xyz data

110 Ansichten (letzte 30 Tage)
SGMukherjee
SGMukherjee am 27 Sep. 2018
Bearbeitet: Adam Danz am 9 Mär. 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.

Akzeptierte Antwort

Star Strider
Star Strider am 27 Sep. 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 Kommentare
wadah mahmoud
wadah mahmoud am 8 Mär. 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 am 9 Mär. 2020
Bearbeitet: Adam Danz am 9 Mär. 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)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

jonas
jonas am 27 Sep. 2018
Bearbeitet: jonas am 27 Sep. 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 Kommentare
youssef aider
youssef aider am 25 Mär. 2019
works but, still gives some fluctuations
Daniyal Altaf Baloch
Daniyal Altaf Baloch am 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 .

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Contour Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by