2017-06-21 21 views
1

我需要使用semilogx(x,y)来绘制图表。我有x=[0 1 2 ... 10 15 20 30 50 75 100]。问题是MATLAB不绘制x=0,我知道这是因为log(0)=undef。那么MATLAB中有另一种方法来传播我的观点吗?因为使用线性比例尺会在图形宽度的1/10处挤压所有第一点!如何在semilogx图中绘制x = 0?

+0

你有没有试过,如果要弄清楚有可能通过h来完成和先报道?记住日志是为所有x> 0定义的... –

+0

是的,我知道,但是你知道其他东西使x轴的一部分大于其余吗? – John

回答

1

通常情况下,在这种情况下所做的是将1添加到所有x,因此第一个值(原始为0)出现在原点处,并且所有值的回转换也是相同的。您可以添加除1以外的任何其他小数值,并获得类似的结果。但是,您不要添加的值太小的(如eps),因为那么您将与下一个值有很大距离,这会导致所有其他值在图的右侧打包。

让我们来看一个例子:

x = [0 logspace(0,2,5)]; 
% x = 0 1 3.1623 10 31.623 100 
y = 2.*(x+1); % add 1 to all x 
semilogx(x+1,y,'o','markerfacecolor','b') 

small value

如果用eps替换0而你得到:

x = [0 logspace(0,2,5)]; 
y = 2.*(x+eps); % add a tiny value too all x 
semilogx(x+eps,y,'o','markerfacecolor','b') 

eps

+0

这解决了我的问题!非常感谢 ! – John

0

确实没有定义log(0),但是你可以用一个非常小的数字替代它,例如eps,它在Matlab中定义为一个小号。