更改Matlab默认的x限制行为

问题描述 投票:4回答:3

如果我跑

plot(1:1001)

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

有没有办法改变Matlab的行为,以便plot默认情况下将x-limits设置为等于数据的范围,而不是每次都必须手动执行? (例如,我可以在我的脚本顶部设置一个标志)。

或者我可以传递给plot的参数来实现这一目标?

matlab plot matlab-figure default
3个回答
3
投票

你可以为你的轴设置你的default XlimSpec property

set(0,'defaultAxesXLimSpec', 'tight')

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

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

这符合我在评论中提到的一些关于不使用包装器并在调用plot之后尝试最小化运行额外命令的要求


2
投票

Matlab使用内部算法确定轴刻度的最佳间隔。我怀疑你可以操纵它,即使有可能,我建议你不要这样做。这样的操作会改变你自己的Matlab安装的行为,但是其他人使用你的代码会偶然发现不同的轴标签可能不符合你的目的。

继续手动定义刻度或将您自己的通用逻辑实现到一个单独的函数中,您可以将其与脚本一起发布。 This code展示了如何实现一个,并且可以代表一个很好的起点。

如果您想简化操作,请按如下方式创建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

1
投票

您希望x轴限制紧密适合您的数据。如果你不介意y轴也有这种行为,你可以简单地使用

plot(1:1001)
axis tight

来自documentation

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

请注意,第二行使用dot notation,自R2014b起可用。对于较旧的Matlab版本,请使用set / get


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

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

这是axis tight内部所做的(对于x轴,y轴和z轴),至少在R2017a中。

© www.soinside.com 2019 - 2024. All rights reserved.