我正在使用MATLAB显示3D数据。我使用GUI来更改视角、缩放和平移。我如何存储这个视图并稍后将其应用于另一个图形(包含大致相同的数据)?
非常感谢!
view
给我一个矩阵,但是我如何将其应用于另一个图形?非常感谢!
如果您想在另一个图表中使用当前视角,可以执行以下操作:
% 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
方式来实现相同的效果。文件
->生成m文件
,将创建一个m文件,以3D数据作为输入,并应用设置。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);
要储存和应用视图,请参考Itamar的回答。
对于缩放和平移,您只需要储存轴限制。使用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)
ax_properties = get(gca);
移除您不想应用于新轴的字段,然后使用SET:
set(new_axes_handle,ax_properties)
请注意,结构体中也包含UserData字段。请先删除此字段。您可以使用以下代码进行操作:
rmfield(ax_properties,'UserData')
哇,手动调整和生成 M 文件选项真是我的救星。如果一开始我就知道只需要这样做:
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');