loglog标题中的matlab title()在某些条件下无法正常工作

时间:2013-04-11 12:21:10

标签: matlab

我在使用Matlab设置一些loglog图标时遇到问题。使用plot(x,y)绘制相同数据时,title函数工作正常,但在使用loglog(x,y)时无法显示。我认为这可能是由数据触发的错误,但看起来我错了 - 请看下面的评论。

%title_prob
figure
x=0:1:1000;                     
y=3*x.^x;                       %The sum of this vecor is Inf
loglog(x,y)
title('Title','FontSize',16)    %This title doesn't set
xlabel('X Label','FontSize',12)
ylabel('Y Label','FontSize',12)

figure
x2=0:1:100;
y2=3*x2.^x2;                    %The sum of this vector is finite
loglog(x2,y2)
title('Title','FontSize',16)    %This title does set
xlabel('X Label','FontSize',12)
ylabel('Y Label','FontSize',12)

%Further investigation - is Inf to blame?  Apparently not.
FirstInf=max(find(y<Inf))+1;
figure
loglog(x(1:FirstInf),y(1:FirstInf))
title('Inf value in the y vector','FontSize',16)    %Title not set

figure
loglog(x(1:FirstInf-1),y(1:FirstInf-1))
title('NO Inf value in the y vector','FontSize',16) %Title not set
figure
plot(x,y)
title('Works for the plot function','FontSize',16)

感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

%Further investigation - is Inf to blame?  Apparently not.
FirstInf=max(find(y<Inf))+1;
figure
loglog(x(1:FirstInf),y(1:FirstInf))
title('Inf value in the y vector','FontSize',16)    %Title not set

是的但你可能在第一个位置有一个NAN,在 y(1)。由于0 ^ 0未定义,因此可能导致异常。

编辑。从技术上讲,0 ^ 0是未定义的,因为限制取决于您在增强中接近零的方式。 Lim x ^ 0(当x从上面变为零)是 1 ,而lim 0 ^ x(当x变为零)是 0 。这就是技术上未定义的原因。

然而,我刚刚检查了gnu-Octave,0 ^ 0返回1没有任何问题。所以Matlab可能会返回相同的内容。所以我想这不是答案,但我会留在这里,因为有人可能会对0 ^ 0的技术难题感兴趣。

答案 1 :(得分:1)

标题位置始终基于y上限以轴坐标计算。因此,如果它是Inf,则标题位置也将是Inf,并且它将不可见。

当您从y取出Inf值时(图4),下一个值仍然非常大,约为1e306。为了计算标题的位置,MATLAB将一些数字添加到y上限(略低于1.8e308,由ylim检查)并且它变为Inf(1.8e308已经是Inf)。使用REALMAX检查双倍值限制。

您可以使用

检查标题位置
get(get(gca,'title'),'position')

所以,是的,这是使你的头衔消失的Inf值。

您可以在致电title之前手动设置y轴限制:

yl = ylim;
ylim([yl(1), 10^302])