2017-03-10 18 views
2

私の作品を編集するときにちょうどこのニュアンスに気付きました。Matplotlib:matplotlib 2.0で導入された軸のオフセットをキャンセルする

以前は、matplotlibのは、次のようになります。

x=[1,2,3,4,5] 
y=[4,5,5,2,1] 
plot(x,y,'-') 

enter image description here

しかし、最近のアップグレード後に、私は信じて、

このような enter image description here

を返すことになる、そこにオフセットされています

私は今見たものから少し不必要です。私は知りたい

  1. このオフセットは、データの視覚化の良い練習ですか?もしそうなら、私はそれをそのまま残します。

  2. このオフセットをキャンセルするにはどうすればよいですか?

私は手動plt.gca().set_xlim([1, 5])によって制限を復元することができますが、私は別の20のプロットを持っている場合にはスケールしません。私は周りにグーグルでこれについてあまり情報を見つけることはありませんでした。

+0

あなたはこれを見ましたか?http://stackoverflow.com/questions/3677368/matplotlib-format-axis-offset-values-to-whole-numbers-or-specific-number – putonspectacles

+0

@putonspectaclesありがとうございました!しかし、私はAPIや何かがあるべきだと思った...その答えは過剰なもののようです。 – cqcn1991

+1

@ImportanceOfBeingErnestそれはanwerです!ありがとう! – cqcn1991

答えて

3

で、デフォルトの軸マージンは軸上のデータの周りに空白を制御する値である、0から0.05まで、変更されました。この変更の理由については、hereを参照してください。

以前の動作に戻すにはいくつかの方法があります。単軸インスタンス用に0にmarginsをリセットする

1):

plt.margins(0) 

又は

ax.margins(0) 

2)、スクリプト内のすべてのプロットを0にmarginsリセットrcParamsを使用して設定しますこれはあなたのスクリプトの先頭にあります:

plt.rcParams['axes.autolimit_mode'] = 'round_numbers' 
plt.rcParams['axes.xmargin'] = 0. 
plt.rcParams['axes.ymargin'] = 0. 

3) (1)と、本当に古い動作を取得、あなたもplt.rcParams['axes.autolimit_mode'] = 'round_numbers'を設定する必要があるかもしれませんメソッドを使用する

axes.autolimit_mode: round_numbers 
axes.xmargin  : 0. 
axes.ymargin  : 0. 

注:ANGEは、マシン上のすべてのプロットのデフォルト値は、あなたのmatplotlibrcファイルを修正し、これらの行を含めます。

+0

わかりました、私は気が狂っている理由は、それが海底と混ざっているということです。グリッド線がなければ、プロットははるかに良く見えます。 – cqcn1991

0

その優れた実践が少し議論であるかどうかを推測します。それは何とかあなたのプロットが続行することを示唆しています(しかし、あなたはそれのウィンドウを表示します)。実際には続けるが、この部分をプロットすれば、それを削除するのは理にかなっている。

スケーラブルなアプローチがmatplotlibのv2.0.xでは

plt.gca().set_xlim([np.min(x), np.max(x)]) 
+0

複数の線や他の要素を1つの図にプロットすると、それでもかなり問題になります。 – cqcn1991

関連する問題