将轴最小值和最大值设置为粘滞

mal*_*low 3 matlab axes subplot

我有一个(3,4)子图,每个子图显示散点图.散点图的范围变化,因此我的一些图具有轴x(0-30)和y(0-8),但是一些具有x(18-22)和y(4-7).我将我的xlim设置为[0 30],将ylim设置为[0 8]但是我的轴设置为永远不会低于0,高于30等.

如何将我的轴设置为"粘贴"在(0,0)处为每个绘图的原点,并且"粘贴"为8表示Y,30表示X.

TIA提供任何帮助


更新每条评论答案:
以下代码仍有同样的问题

%% plot

for i = 1:num_bins;

h = zeros(ceil(num_bins),1);

h(i)=subplot(4,3,i);

plotmatrix(current_rpm,current_torque)

end

linkaxes(h,'xy');

axis([0 30 0 8]);
Run Code Online (Sandbox Code Playgroud)

Pur*_*uit 7

要以编程方式设置轴边界,有一些有用的命令:

axis([0 30 0 8]);  %Sets all four axis bounds
Run Code Online (Sandbox Code Playgroud)

要么

xlim([0 30]);  %Sets x axis limits
ylim([0 8]);   %Sets y axis limits
Run Code Online (Sandbox Code Playgroud)

要仅设置两个x限制中的一个,我通常使用如下代码:

xlim([0 max(xlim)]);  %Leaves upper x limit unchanged, sets lower x limit to 0
Run Code Online (Sandbox Code Playgroud)

这利用了xlims zero输入参数调用约定,它返回当前x限制的数组.同样适用ylim.

请注意,所有这些命令都适用于当前轴,因此如果要创建子图,则需要在构建图时对每个轴执行一次缩放调用.


另一个有用的功能是linkaxes命令.这会动态链接两个图的轴限制,包括编程调整大小命令xlim和平移和缩放等UI操作.例如:

a(1) = subplot(211),plot(rand(10,1), rand(10,1)); %Store axis handles in "a" vector
a(2) = subplot(212),plot(rand(10,1), rand(10,1)): %

linkaxes(a, 'xy');

axis([0 30 0 8]);  %Note that all axes are now adjusted together
%Also try some manual zoom, pan operations using the UI buttons.
Run Code Online (Sandbox Code Playgroud)

查看代码,发布编辑,您对plotmatrix函数的使用使事情变得复杂. plotmatrix似乎创建了自己的轴,因此您需要捕获这些手柄并进行调整.(另外,将来h = zeros(..)退出循环).

要获取plotmatrix创建轴的句柄,请使用第二个返回参数,如下所示:[~, hAxes]=plotmatrix(current_rpm,current_torque);.然后收集它们以备将来使用.

最后,axis,xlim,ylim命令在当前的轴的所有的行为,(见gca).但是plotmatrix轴永远不是最新的,所以axis命令并没有影响它们.您可以指定要执行的轴,如下所示: axis(hAxis, [0 30 0 8]);.

将所有这些放在一起(添加一些变量定义以使代码执行),这就是它的样子:

%Define some dummy variables
current_rpm = rand(20,1)*30;
current_torque = rand(20,1)*8;
num_bins = 12;

%Loop to plot, collecting generated axis handles into "hAllAxes"
hAllAxes = [];
for i = 1:num_bins;
    subplot(4,3,i);
    [~, hCurrentAxes]=plotmatrix(current_rpm,current_torque);
    hAllAxes = [hAllAxes hCurrentAxes];  %#ok
end
linkaxes(hAllAxes,'xy');    
axis(hAllAxes,[0 30 0 8]);
Run Code Online (Sandbox Code Playgroud)

  • 确保在绘制数据后设置轴. (2认同)