好的,这是我第一次尝试解决您的问题。方法:
- 制作一个图形,并像以前一样冻结纵横比
- 如果您需要 XY 或 XZ 投影,只需按下轴下方的按钮之一
当您按下按钮时,水平缩放(例如,仅在 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