指定部分自动限制时查找实际绘图限制

Find actual plot limits when specifying partially automatic limits

如何在此处找到实际的 y 范围:

这只是文档中的示例 http://www.mathworks.com/help/matlab/ref/axis.html

 x = linspace(-10,10,200);
 y = sin(4*x)./exp(.1*x);
 plot(x,y)
 axis([-10 10 0 inf])

ymin 值指定为零,最大值自动保留。如果我现在用

查询范围
  get(gca,'YLim')

我刚刚得到 [ 0 inf ]。我如何确定实际使用的绘图 y 范围(对于此示例,它约为 [0 2.5]..)

编辑 - 搁置

以防其他人遇到此问题 - 最好避免此问题:使用全自动范围制作绘图,然后根据需要修复范围,以便您确切知道它是什么,例如。

  plot(x,y)
  origYrange=ylim
  origXrange=xlim
  axis([origXrange 0 origYrange(2)])

虽然文档没有说明,但似乎当 ylim 的第一个(第二个)值设置为 -inf (inf) 时,Matlab 设置了较低的(较高的) ) y 轴限制作为图中所有 y 值的最小值(最大值)。后者通过读取轴的所有'children''YData'属性就可以知道

yd = get(get(gca,'children'),'YData'); %// get y data of all plots
if iscell(yd) %// if there's more than one plot yd is a cell array of numeric vectors;
              %// otherwise it's a numeric vector
    yd = [yd{:}]; %// combine all values into a single numeric vector
end
ydminmax = [min(yd) max(yd)]; %// computed limits
result = ylim;
ind = isinf(result);
result(ind) = ydminmax(ind); %// replace infinite values by computed values

在你的例子中,结果是

result =
         0    2.4313