2017-06-21 8 views
1

semilogx(x,y)を使用してグラフをプロットする必要があります。私はx=[0 1 2 ... 10 15 20 30 50 75 100]です。問題は、log(0)=undefとわかっているので、MATLABがx=0をプロットしていないことです。それでは、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

あなたはeps0を交換する場合は、あなたが得る中:

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で定義されています。

関連する問題