如果我跑
plot(1:1001)
Matlab自动将x范围设置为1:1200
。我知道xlim([1,1001])
存在,但我不想在每次使用plot
时添加此行。
有没有办法改变Matlab的行为,以便plot
默认情况下将x-limits设置为等于数据的范围,而不是每次都必须手动执行? (例如,我可以在脚本的顶部设置一个标志)。
或者我可以传递给plot
的参数来实现这一目标?
答案 0 :(得分:3)
您可以为Axes设置default XlimSpec property。
set(0,'defaultAxesXLimSpec', 'tight')
然后,当你绘制它时,将为每个新绘图使用X轴紧设置。
关闭后,这将恢复正常。重启Matlab。但是,您可以将其添加到启动脚本中以始终应用它。
这符合我在评论中提到的有关不使用包装器并尝试在调用plot
答案 1 :(得分: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
答案 2 :(得分:1)
您希望 x -axis限制能够严格适合您的数据。如果你不介意 y -axis也有这种行为,你可以简单地使用
plot(1:1001)
axis tight
axis tight
将轴限制设置为数据范围
如果您希望 x -axis 紧,手动,如下所示:
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 -axis),至少在R2017a。