extract fig into surf(x,y,z)
29 ビュー (過去 30 日間)
古いコメントを表示
There's a .fig that plots n z(x) curves, each of which corresponds to 1 y value (n=3 in the illustration). The y values are known data. I don't have those z(x) data besides this .fig. How to convert this fig into a surf(x,y,z) plot?
3 件のコメント
DGM
2024 年 12 月 5 日 19:48
I reduced part of the above example to a fig file with nothing other than the 2D line part:
% say we have a fig file with some 2D line plots
hfig = openfig('stuff.fig');
% assuming it contains a number of 2D line objects
hl = findobj(hfig,'type','line');
% let's say we knew what the ydata was
y = [0 0.4 0.6 0.75 0.9 1.05 1.2].';
% assuming the xdata,zdata length is consistent across all line objects
xlen = numel(hl(1).XData);
nlines = numel(hl);
X = zeros(nlines,xlen);
for k = 1:nlines
ki = nlines - k + 1; % expect object order to be reversed
X(k,:) = hl(ki).XData;
Z(k,:) = hl(ki).YData;
end
% go ahead and expand y in the case that all the xdata vectors are not identical
Y = repmat(y,[1 xlen]);
% make a new surf plot
figure
surf(X,Y,Z)
That gives us the same surf plot that we had before. If the data series aren't the same length, you might need to jump through a few other hoops.
回答 (1 件)
Star Strider
2024 年 12 月 4 日 12:34
One way is tto enlarge the y-values to a matrix using repmat and then offset them by adding a different constant to each column (in this example).
x = linspace(0, 1).';
z = sin(2*pi*x*(1:3));
y = ones(size(z,1),1);
xm = repmat(x, 1, size(z,2));
ym = repmat(y, 1, size(z,2));
figure
plot3(xm, ym, z)
grid
colormap(turbo)
title('‘plot3’ Using ‘Original’ Y-Values')
figure
surf(xm, ym, z)
grid on
colormap(turbo)
title('‘surf’ Using ‘Original’ Y-Values')
ym = ym + (0:2); % Create ‘Offset’ ‘Y’-Values
figure
surf(xm, ym, z)
grid on
colormap(turbo)
title('‘surf’ Using ‘Offset’ Y-Values')
.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Printing and Saving についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!