How to extract x and y position of contour line?
    38 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
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
shading flat;
hold on;
[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 = get(hh(1), 'ydata');
plot(xPointsOfContour, yPointsOfContour, 'w.'); % Demo that points on contour line were extracted
0 Kommentare
Akzeptierte Antwort
Weitere Antworten (2)
  Yuhang Luo
 am 29 Jun. 2018
        https://ww2.mathworks.cn/matlabcentral/fileexchange/38863-extract-contour-data-from-contour-matrix-c this function might work.
1 Kommentar
  Adam Danz
    
      
 am 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....
  John L
 am 9 Jun. 2017
        Plot a single contour, then plot(hh.ContourMatrix(1,2:end),hh.ContourMatrix(2,2:end))
2 Kommentare
  Lars K.
 am 12 Feb. 2019
				hi john,
with your answer you explained something very important using contour. I struggled and lost a lot of time, while i was trying to find intersections of two contour lines. 

Plotting both contour matrix as lines and execute
[x,y,~,~]=intersection(contour1(1,:),contour1(2,:),contour2(1,:),contour2(2,:),true)
(btw thanks a lot to Douglas Schwarz) the intersection script found 6 intersections (4 wrong ones). Plotting both contour lines with markers i saw these other data points the first time.
The first column of the contour matrix M contains the value of the contour line and does not belong to the xy data points. With Johns little but important hint using
[x,y,~,~]=intersection(contour1(1,2:end),contour1(2,2:end),contour2(1,2:end),contour2(2,2:end),true)
the problem was solved and i got my two correct intersections.
  KFoster
 am 1 Okt. 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: https://www.mathworks.com/help/matlab/ref/contour.html#mw_6bc1813f-47cf-4c44-a454-f937ea210ab6
Siehe auch
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!








