更改Matlab默认的x轴限制行为

4
如果我运行
plot(1:1001)

Matlab自动将x范围设置为1:1200。我知道存在xlim([1,1001]),但我不想每次使用plot时都添加这行代码。

有没有一种方法可以更改Matlab的默认行为,使得plot默认将x轴限制设置为数据范围,而无需手动设置?(例如,我可以在脚本顶部设置一个标志)。

或者,我可以传递给plot的参数来实现这个功能吗?

3个回答

3
你可以为坐标轴设置默认的XlimSpec属性
set(0,'defaultAxesXLimSpec', 'tight')

然后当您绘制时,每个新的图都将使用X轴紧密设置。

这将在关闭并重新启动Matlab之后恢复正常。但是,您可以将其添加到启动脚本中以始终应用它。

我看到您在评论中提到不使用包装器并尝试在调用plot之后最小化运行额外命令的要求,这符合部分您的要求。


2
Matlab使用内部算法来确定轴刻度的最佳间隔。我怀疑你无法操纵它,即使可能也建议你不要这样做。这样的操作会改变你自己的Matlab安装的行为,但是使用你的代码的其他人可能会遇到不同的轴标签,可能与你的目的不符。
继续手动定义你的刻度或将你自己的通用逻辑实现到一个单独的函数中,可以与你的脚本一起发布。这段代码展示了如何实现一个函数,可以作为你的起点。
如果你想让事情更简单,可以创建一个plot函数的包装器,如下所示:
h = plot_wrapper(true,1:101,1:101);

function varargout = plot_wrapper(fix_limits,varargin)

    han = plot(varargin{:});

    if (fix_limits)
        x = get(han,'XData');
        xlim(gca,[min(x) max(x)]);

        y = get(han,'YData');
        ylim(gca,[min(y) max(y)]);
    end

    if (nargout)
        varargout{1} = han;
    end

end

我并没有考虑改变Matlab的内部结构,我更多是在考虑在我的脚本顶部设置一个标志或直接传递到plot函数中的标志。我会更新问题以反映这一点。 - dkv
好的,感谢更新。实际上,我的答案仍然提供了一个很好的解决方案,它包括创建一个 plot 函数的包装器,您可以向其中添加一个参数,即您的标志,告诉脚本是否必须更改限制。我会更新我的代码来展示给你看。 - Tommaso Belluzzo
好的,答案已编辑。如果对您有帮助,请告诉我。 - Tommaso Belluzzo
感谢更新。非常好的回答,但我暂时不会将其标记为已解决,因为它更像是一种变通方法而不是解决方案。我正在寻找删除额外代码行的方法,这个方法并没有真正做到这一点,使用它意味着需要拖动一个额外的绘图包装器来处理所有项目,这会降低可读性。 - dkv

1
你希望x轴的限制紧密地适应你的数据。如果你不介意y轴也有这种行为,那么你可以简单地使用。
plot(1:1001)
axis tight

文档中得知,

axis tight将坐标轴限制设置为数据范围


如果你只想让x轴紧凑,可以按照以下方式进行手动调整:
h = plot(1:1001); % h is a line object
h.Parent.XLim = [min(h.XData) max(h.XData)]; % set x-axis limits as per the line data

请注意第二行使用了点表示法,该方法从R2014b版本开始可用。对于旧版Matlab,请使用set/get方法。

或者你可以通过将轴的看似未记录的 'XLimSpec' 属性设置为 'tight' 来实现自动完成:

plot(1:1001)
set(gca, 'XLimSpec', 'tight')

这就是axis tight在R2017a版本中内部执行的内容(对于xyz轴),至少是这样的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接