How to extract x and y position of contour line?
59 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
その他の回答 (2 件)
Yuhang Luo
2018 年 6 月 29 日
https://ww2.mathworks.cn/matlabcentral/fileexchange/38863-extract-contour-data-from-contour-matrix-c this function might work.
1 件のコメント
Adam Danz
2020 年 1 月 23 日
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
2017 年 6 月 9 日
Plot a single contour, then plot(hh.ContourMatrix(1,2:end),hh.ContourMatrix(2,2:end))
2 件のコメント
Lars K.
2019 年 2 月 12 日
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
2021 年 10 月 1 日
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
参考
カテゴリ
Help Center および File Exchange で Contour Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!