我正在使用MATLAB显示3d数据。我使用GUI来改变视角,缩放和平移。如何存储此视图,然后将其应用于另一个图形(包含或多或少相同的数据)? view
给了我一个矩阵,但我怎么能将它应用到另一个数字?
非常感谢!
答案 0 :(得分:5)
要在另一个图上使用当前视角,您可以执行以下操作:
% call when the source axes is the current axes
[az, el] = view;
% call when the target axes is the current axes
view (az, el);
或者,您可以使用get
属性的set
和view
执行相同操作。
但是,要应用您一起提到的所有视图属性,使用Matlab内置的“生成m文件”选项会更容易 - 当您想要3D图形时,请转到file
- > Generate m-file
,将创建一个m-file,将3D数据作为输入,然后应用设置。
另一种选择是自己保存这些相关设置(只需检查生成的m文件):
plot3(sin(t),cos(t),t);
pba = get(gca, 'PlotBoxAspectRatio');
dar = get(gca, 'DataAspectRatio');
cva = get(gca, 'CameraViewAngle');
cuv = get(gca, 'CameraUpVector');
ct = get(gca, 'CameraTarget');
cp = get(gca, 'CameraPosition');
然后将其应用于当前轴(假设目标轴是当前轴):
set(gca, 'PlotBoxAspectRatio',pba);
set(gca, 'DataAspectRatio',dar);
set(gca, 'CameraViewAngle',cva);
set(gca, 'CameraUpVector',cuv);
set(gca, 'CameraTarget',ct);
set(gca, 'CameraPosition',cp);
答案 1 :(得分:2)
要存储和应用视图,请参阅Itamar's answer。
对于缩放和平移,您只需存储轴限制。使用xlim,ylim和zlim或相应的轴属性(XLim等)和get / set。
当前轴存储限制:
xl = xlim;
yl = ylim;
zl = zlim;
或者使用轴属性:
xl = get(gca,'XLim');
要应用于另一个图上的轴:
xlim(new_axes_handle,xl) % you can skip new_axes_handle for current axes
ylim(new_axes_handle,yl)
zlim(new_axes_handle,zl)
或者
set(new_axes_handle,'XLim',xl,'YLim',yl','ZLim',zl)
顺便说一下,除了Itamar的答案,你可以将所有轴属性一次性地放入一个结构中:
ax_properties = get(gca);
删除不想应用于新轴的字段,然后使用SET:
set(new_axes_handle,ax_properties)
要小心,因为结构也包含UserData。首先删除此字段。您可以通过以下代码执行此操作:
rmfield(ax_properties,'UserData')
答案 2 :(得分:1)
axes1 = axes('Parent',Plot_ele,'PlotBoxAspectRatio',[1 1.70454545454545 1.7],...
'DataAspectRatio',[1 1 1],...
'CameraViewAngle',7.48227189414101,...
'CameraUpVector',[-0.0256575066196788 0.989185543639328 -0.144407938178721],...
'CameraTarget',[255.013054349713 397.874703616223 449.003273637903],...
'CameraPosition',[1445.8877301745 1407.25270740567 7151.59363497921]);
% xlim(axes1,[0 528]); % uncomment to preserve axes x-limits
% zlim(axes1,[0 897.6]); % uncomment to preserve axes z-limits
hold(axes1,'all');