更改 Matlab 默认的 x 限制行为
Change Matlab default x-limits behavior
如果我运行
plot(1:1001)
Matlab 自动将 x 范围设置为 1:1200
。我知道 xlim([1,1001])
存在,但我不想每次使用 plot
时都添加这一行。
有没有办法改变 Matlab 的行为,以便 plot
默认将 x 限制设置为等于数据范围,而不必每次都手动设置? (例如,我可以在脚本顶部设置一个标志)。
或者我可以传递给 plot
的参数来实现这一点?
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
您希望 x 轴限制紧密适合您的数据。如果你不介意 y 轴也有这种行为,你可以简单地使用
plot(1:1001)
axis tight
axis tight
sets the axis limits to the range of the data
如果你想要只有x轴紧,你可以手动[=49] =]如下:
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 中。
您可以为 Axes 设置 default XlimSpec property。
set(0,'defaultAxesXLimSpec', 'tight')
然后当您绘图时,它将为每个新绘图使用 X 轴紧密设置。
关闭并重新启动 Matlab 后,这将恢复正常。但是,您可以将其添加到您的启动脚本中以始终应用它。
这满足了你的一些要求,我看到你在评论中提到了关于不使用包装器并试图在调用后尽量减少 运行 额外命令 plot
如果我运行
plot(1:1001)
Matlab 自动将 x 范围设置为 1:1200
。我知道 xlim([1,1001])
存在,但我不想每次使用 plot
时都添加这一行。
有没有办法改变 Matlab 的行为,以便 plot
默认将 x 限制设置为等于数据范围,而不必每次都手动设置? (例如,我可以在脚本顶部设置一个标志)。
或者我可以传递给 plot
的参数来实现这一点?
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
您希望 x 轴限制紧密适合您的数据。如果你不介意 y 轴也有这种行为,你可以简单地使用
plot(1:1001)
axis tight
axis tight
sets the axis limits to the range of the data
如果你想要只有x轴紧,你可以手动[=49] =]如下:
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 中。
您可以为 Axes 设置 default XlimSpec property。
set(0,'defaultAxesXLimSpec', 'tight')
然后当您绘图时,它将为每个新绘图使用 X 轴紧密设置。
关闭并重新启动 Matlab 后,这将恢复正常。但是,您可以将其添加到您的启动脚本中以始终应用它。
这满足了你的一些要求,我看到你在评论中提到了关于不使用包装器并试图在调用后尽量减少 运行 额外命令 plot