2017-03-10 84 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這是一個污點!謝謝! – cqcn1991

回答

3

在matplotlib V2.0.x中,默認的軸餘量已經改變,從0至0.05,這是控制上的軸周圍的數據空白值。有關更改背後的推理,請參閱here

有幾種方法可以恢復到以前的行爲。

1)要重置margins爲0的單個軸實例:

plt.margins(0) 

ax.margins(0) 

2)要重置margins爲0用於在腳本中的所有情節,使用rcParams並設置這在您的腳本的頂部:

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

3)要ch安格一臺機器上的所有地塊的默認值,修改您的matplotlibrc文件,包括這些行:

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

注意使用方法(1),真正得到舊的行爲,您可能還需要設置plt.rcParams['axes.autolimit_mode'] = 'round_numbers'

+0

明白了,我會說我覺得不合適的原因是它與海寶混在一起。如果沒有網格線,情節看起來會好很多。 – cqcn1991

0

猜猜它的良好做法是否有點討論。它以某種方式表明你的情節繼續(但你只是顯示它的一個窗口),所以如果你的情節只在這個區域定義有一個偏移量是有道理的。如果它實際上繼續,但你只是繪製這部分,那麼刪除它是合乎邏輯的。

的可擴展的方法是

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

如果我在一個圖中繪製幾行或其他元素,這仍然是一個相當麻煩。 – cqcn1991