How to extract x and y position of contour line?

296 views (last 30 days)
K E
K E on 23 Jul 2015
Commented: KFosteron 1 Oct 2021
In old matlab versions, I could extract x and y points along a contour line as shown below. This is incredibly useful in my work. Now in R2015 the approach doesn't work (hh.XData and hh.YData are the x and y values of the data you're contouring, rather than the x,y position of the contour line). In more recent versions of contour, how can I extract x,y points along a contour line? If I can't do it via contour, is there another way?
z = peaks;% Load in a dataset that all matlab users have
x = 1:size(peaks, 2); y = 1:size(peaks, 1);
figure;
pcolor(x, y, z);% Plot the data
shadingflat;
holdon;
[cc, hh] = contour('v6', x, y, z, [0 10^5],'k');% Overlay contour line (will plot 3 continuous contours)
xPointsOfContour = get(hh(1),'xdata');% Get points along the first contour
yPointsOfContour =得到(hh (1),'ydata');
plot(xPointsOfContour, yPointsOfContour,'w.');% Demo that points on contour line were extracted

Accepted Answer

K E
K E on 23 Jul 2015
Just realized that the contour matrix cc now seems to contain x and y location data,
pcolor(x, y, z);% Plot the data
holdon;
shadingflat
[cc, hh] = contour(x, y, z, [0 10^5],'k');% Overlay contour line
holdon;
cc(cc<1) = NaN;
h = plot(cc(1,:), cc(2, :),'w.');
8 Comments
Adam Danz
Adam Danz on 29 Jul 2021
w = white
'.' = point markers
w. = white point markers

Sign in to comment.

More Answers (2)

约翰L
约翰L on 9 Jun 2017
Plot a single contour, then plot(hh.ContourMatrix(1,2:end),hh.ContourMatrix(2,2:end))
2 Comments
KFoster
KFoster on 1 Oct 2021
The first column of the contour matrix M denotes what contour level and how many vertices are included in that particular line; similar columns are found throughout the M matrix between the coordinates for each line. It's in the matlab documentation here: //www.tatmou.com/help/matlab/ref/contour.html#mw_6bc1813f-47cf-4c44-a454-f937ea210ab6

Sign in to comment.


Yuhang Luo
Yuhang Luo on 29 Jun 2018
1 Comment
Adam Danz
Adam Danz on 23 Jan 2020
Also see
[cm, h] = contour(. . .);
contourTable = getContourLineCoordinates(cm);
% --or--
contourTable = getContourLineCoordinates(h);
% contourTable =
% Level Group X Y
% ________ _____ __________ __________
% -5.8504 1 -0.040982 -1.625
% -5.8504 1 -0.027916 -1.75
% -5.8504 1 0 -1.7823
% -5.8504 1 0.045032 -1.5
% etc....

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!