我有一个(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]);
答案 0 :(得分: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
这利用了xlim
的零输入参数调用约定,它返回当前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]);