我在使用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)
感谢您的任何建议。
答案 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])