我需要使用semilogx(x,y)
绘制图表。我有x=[0 1 2 ... 10 15 20 30 50 75 100]
。问题是MATLAB没有绘制x=0
,我理解这是因为log(0)=undef
。那么在MATLAB中有另一种方法可以传播我的观点吗?因为使用线性刻度会挤压图形宽度的1/10的所有第一点!
答案 0 :(得分:2)
通常情况下,在这种情况下执行的操作是向所有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')
如果您将0
替换为eps
,则会获得:
x = [0 logspace(0,2,5)];
y = 2.*(x+eps); % add a tiny value too all x
semilogx(x+eps,y,'o','markerfacecolor','b')