Combining two surfaces from two files into one surface plot

34 views (last 30 days)
Is there any way to combine two surface plots from diffterent matlab files into one surface plot?
Assuming that the range of X,Y,Z coordinates of the two surfaces are close.

Accepted Answer

Dave B
Dave B on 6 Apr 2022
Edited: Dave B on 6 Apr 2022
Do you mean two different .fig files?
You can generally find objects that live in an axes with findobj, which is good for looking for an object of a specific type. You can reparent those objects by setting the Parent (e.g. to a new axes, or from one old axes into another):L
This bit creates a couple of example surfaces
z1=peaks;
z2=z1+randn(size(z1))/5;
figure(1)
surf(z1)
savefig('foo1.fig')
figure(2)
surf(z2,'FaceColor','r')
savefig('foo2.fig')
The bit below opens the figures
f1 = openfig('foo1.fig');
f2 = openfig('foo2.fig');
The final section finds the surfc and copies them into a new axes:
s1 = findobj(f1,'Type','surf');
s2 = findobj(f2,'Type','surf');
figure;
ax=axes; % the new target for the old surfs
copyobj(s1, ax) % or s1.Parent = ax; to move it
copyobj(s2, ax); % or s2.Parent = ax; to move it
% note that the new axes won't inherit the configuration of the old axes
% (e.g. the 3-d view), but see below for an alternative.
view(3)
% or: just do copyobj(s1,s1.Parent) or s2.Parent=s1.Parent if
% you want to copy/move the second surface into the same axes
% as the first, preserving the view and other axes characteristics
  3 Comments
Dave B
Dave B on 6 Apr 2022
if you have two .fig files that contain your figures you can save them wherever you want, just as long as you can find them when it's time to load. If you don't specify the path when loading, MATLAB will look in the search path.
As a general rule, a .fig file is independent of the code used to generate it. The .fig file contains all of the data bout your surfaces and does not re-run the code used to make them.
If you have two .m files which contain code to generate some surface, you can just call them hold on between the calls MATLAB will plot them in the same axes (provided you don't clear the axes or figure).
% Note: no files needed below, simply call hold on between calls to surf
% and MATLAB will overlay the surfaces
z1=peaks;
z2=z1+randn(size(z1))/5;
figure(1)
surf(z1)
hold on
surf(z2,'FaceColor','r')

Sign in to comment.

More Answers (0)

Categories

Find more on Graphics Object Programming in Help Center and File Exchange

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!