我使用函数 daspect()使三维图的Y轴和Z轴在MATLAB中以相同的比例尺出现。
我使用以下代码实现了这一点(在使用 plot3 绘制图形后应用):
tmpAspect=daspect(); % get the aspect ratio of the axes scales
daspect(tmpAspect([1 2 2])); % make the Y and Z axes equal in scale
这正是我正在寻找的行为,因为我需要在最初绘制图形时Y轴和Z轴相同。
但是 - 如果我尝试放大,我只能在保持Y轴和Z轴之间严格关系的同时进行变焦。这当然正是我要求程序做的事情,而且它的工作做得很好。但我只希望在生成绘图时应用Y轴和Z轴之间的这种关系 - 之后,需要可以以任何我喜欢的方式放大。
有没有办法用等效比例设置图表(如上面的代码所示),但允许用户在他们想要的时候打破这种关系?
编辑:下图显示了我的身影的三个视图。首先,在三个维度中,可以看出,保持Y轴和Z轴之间的严格关系(均以度为单位)是有用的。其次,这只是X轴和Y轴的视图。为了更详细地查看(第3张图像),仅需要水平放大。此时,删除Y轴和Z轴之间的关系有助于更好地进行可视化。
n.b。 Y轴包含' X位置'数据和Z轴包含“Y”位置'数据。只是为了让事情更加混乱!
答案 0 :(得分:1)
好的,这是我第一次尝试你的问题。方法:
当您按下按钮时,将立即启用水平缩放(例如,仅在x方向上),因此滚动鼠标滚轮将水平缩放轴。
在深入研究之前,只需将所有内容复制并粘贴到名为myPlot.m
的m文件中并执行即可。看看这是否确实与您所追求的一致。如果你满意,我可以进一步加强它。
function myPlot
% init figure
fig = figure;
set(fig, 'units', 'normalized');
% some sample data
datat = 0:200*pi;
dataz = sin(datat) + rand(size(datat));
datay = cos(datat) + rand(size(datat));
datax = datat;
% sample plot
plt3D
% your current method
function plt3D(varargin)
cleanFig
plot3(datax, datay, dataz, 'b.')
view(-68, 30)
tmpAspect = daspect();
daspect(tmpAspect([1 2 2]));
end
% 2D plot, XY projection
function pltXY(varargin)
cleanFig
plot(datax, datay, 'b.')
xlabel('Time [msec]')
ylabel('X-position');
zoom xon
end
% 2D plot, XZ projection
function pltXZ(varargin)
cleanFig
plot(datax, dataz, 'b.')
xlabel('Time [msec]')
ylabel('Y-position (^{\circ})');
zoom xon
end
% draw the buttons
function pltButtons
uicontrol(...
'parent' , fig,...
'style' , 'pushbutton', ...
'units' , 'normalized',...
'position', [0, 0, 1/3, 1/15], ...
'string' , 'plot 3D',...
'callback', @plt3D);
uicontrol(...
'style' , 'pushbutton', ...
'units' , 'normalized',...
'position', [1/3, 0, 1/3, 1/15], ...
'string' , 'plot XY',...
'callback', @pltXY);
uicontrol(...
'style' , 'pushbutton', ...
'units' , 'normalized',...
'position', [2/3, 0, 1/3, 1/15], ...
'string' , 'plot XZ',...
'callback', @pltXZ);
end
% re-init the figure
function cleanFig
set(0, 'currentfigure', fig)
clf, hold on
pltButtons
end
end
答案 1 :(得分:0)
我想知道是否有一个简单的方法。但如果一切都失败了,你可以创建自己的缩放回调。
有关示例,请参阅doc zoom
。