更改Matlab默认的x限制行为
如果我跑更改Matlab默认的x限制行为,matlab,plot,matlab-figure,default,Matlab,Plot,Matlab Figure,Default,如果我跑 plot(1:1001) Matlab自动将x范围设置为1:1200。我知道存在xlim([11001]),但我不想每次使用plot时都添加这一行 是否有一种方法可以改变Matlab的行为,以便plot在默认情况下将x限制设置为等于数据范围,而不是每次都必须手动执行?(例如,我可以在脚本顶部设置一个标志) 或者,我可以将一个参数传递到plot以实现这一点?Matlab使用内部算法来确定轴刻度的最佳间隔。我怀疑你能操纵它,即使这是可能的,我建议你不要这样做。这样的操作将改变您自己的Ma
plot(1:1001)
Matlab自动将x范围设置为1:1200
。我知道存在xlim([11001])
,但我不想每次使用plot
时都添加这一行
是否有一种方法可以改变Matlab的行为,以便plot
在默认情况下将x限制设置为等于数据范围,而不是每次都必须手动执行?(例如,我可以在脚本顶部设置一个标志)
或者,我可以将一个参数传递到
plot
以实现这一点?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
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
您希望x轴限制与数据紧密匹配。如果您不介意y轴也有这种行为,您可以简单地使用
plot(1:1001)
axis tight
从
轴紧
将轴限制设置为数据范围
如果希望仅将x轴拧紧,可以按如下方式手动执行:
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
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')
至少在R2017a中,axis-tight
内部就是这样做的(对于x、y和z轴)。您可以为轴设置
set(0,'defaultAxesXLimSpec', 'tight')
然后,当您打印时,它将为每个新打印使用X轴紧设置
关闭并重新启动Matlab后,这将恢复正常。但是,您可以将其添加到启动脚本中,以便始终应用它
这满足了您的一些要求,我看到您在评论中提到不要使用包装器,尽量减少在调用
plot
后运行额外命令。我没有考虑更改Matlab的内部结构,我更多考虑的是在脚本顶部设置一个标志,或者我可以直接传递到绘图
中的标志。我将更新问题以反映这一点。好的,谢谢更新。实际上,我的答案仍然提供了一个很好的解决方案,它包括创建plot函数的包装器,您可以在其中添加一个参数,即您的标志,它告诉脚本是否必须更改限制。我会更新我的代码给你看。好的,回答编辑。告诉我这对你来说是否是一个好的解决方案。谢谢你的更新+1是一个高质量的答案,但我不会将其标记为已解决,因为它更多的是一种变通方法,而不是解决方案。我希望删除额外的代码行,但这并不是真的,使用它意味着在我的所有项目中拖出一个额外的绘图包装器,这会降低可读性。