2012-04-18 9 views
4

matplotlibのログスケールでy値がゼロの点に接続線をプロットすることはできますか?matplotlibでログスケール上の縦座標がゼロのポイントへの接続線を引く?

私はy軸上にログスケールでプロットしたいデータがあります。いくつかのデータのy値はゼロにあります。 matplotlibがこれらの点をログスケールでプロットすることはできませんが、実際には前の点から次の点に接続線を引くことを望みます(いずれかが非ゼロの場合)。

解決策の1つは、すべてのゼロをいくつかのTINY番号に置き換えることです。私はむしろこれをしないだろう。 Log Plot with No Connecting Line

を私はそれを描きたいのですが:私はy軸上の「symlog」オプションを使用する代わりにすることによって、これを解決するために見ていることだろう Log Plot with Connecting Line

答えて

3

描く何matplotlibの

'log'。あなたが実際にそれがオプションに対処するために設計されたようですまさに問題のこの種のです

"The range within which the plot is linear (to avoid having the plot go to infinity around zero).".

を指定することができますlinthreshy argが続いあります。これは、あなたのログスケールのプロットの下に沿ってこの奇妙な線形ゾーンを持っているちょっとした笑い声を見ることができますが、かなり小さくすることができます。

+0

パーフェクト!私はsymlogオプションを使用するだけでうまくいきますが、何らかの理由で洗濯物に引数を指定しようとすると、 'TypeError:unary - : 'tuple'のための悪いオペランドタイプ – user545424

0

は、あなたはいつもあなたの現在の図から座標を引き抜くことで、グラフの下に余分なポイントをappenedできます

import numpy as np 
import pylab as plt 

# Create some sample data like yours 
X = np.linspace(0,3,100) 
Y = np.exp(-X) 

def semilogy_to_bottom(X,Y): 
    # Plot once to move axes and remove plot 
    P, = plt.semilogy(X,Y) 
    plt.gca().lines.remove(P) 

    # Find the bottom of the graph 
    y_min = plt.gca().get_ylim()[0] 

    # Add a new point 
    X2 = np.concatenate((X,[X[-1]])) 
    Y2 = np.concatenate((Y,[y_min])) 
    plt.semilogy(X2,Y2) 

semilogy_to_bottom(X,Y) 
plt.xlim(0,5) 
plt.show() 

enter image description here

関連する問題