3

我有一个 (3,4) 子图,每个子图都显示散点图。散点图的范围各不相同,所以我的一些图有轴 x(0-30) 和 y(0-8),但有些有 x(18-22) 和 y(4-7)。我已将 xlim 设置为 [0 30],将 ylim 设置为 [0 8],但这会将我的轴设置为永远不会低于 0、高于 30 等。

如何将每个图的原点设置为“坚持”在(0,0),将 Y 设置为 8,X 设置为 30。

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]);
4

1 回答 1

7

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

axis([0 30 0 8]);  %Sets all four axis bounds

或者

xlim([0 30]);  %Sets x axis limits
ylim([0 8]);   %Sets y axis limits

为了只设置两个 x 限制之一,我通常使用如下代码:

xlim([0 max(xlim)]);  %Leaves upper x limit unchanged, sets lower x limit to 0

这利用了xlims 零输入参数调用约定,它返回当前 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.

查看您的代码,发布编辑,您对该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]);
于 2013-03-21T15:38:51.097 回答