2017-08-14 105 views
1

按照documentationax.autoscale(tight=True)應該matplotlib axis('tight')不起作用?

如果爲True,設置視圖限制數據限制;

隨着ax.axis('tight')是相似的:

'緊'          限制設置,使得所有的數據都顯示

(原文如此)

我們甚至看到它可以在this question的屏幕截圖中使用。

但無論我嘗試什麼,它似乎都不適用於下面的簡單示例。這是我鍵入jupyter-qtconsole

In [27]: f, ax = plt.subplots(1) 

In [28]: ax.plot([0, 1], [1, 0]) 
Out[28]: [<matplotlib.lines.Line2D at 0x825abf0>] 

In [29]: ax.axis('tight') 
Out[29]: (-0.050000000000000003, 1.05, -0.050000000000000003, 1.05) 

In [30]: ax.autoscale(tight=True) 

In [31]: plt.axis('tight') 
Out[31]: (-0.050000000000000003, 1.05, -0.050000000000000003, 1.05) 

In [32]: plt.autoscale(tight=True) 

In [33]: ax.plot([0, 1], [1, 0]) 
Out[33]: [<matplotlib.lines.Line2D at 0x825a4d0>] 

In [34]: ax.autoscale(enable=True, axis='x', tight=True) 

縱觀這些命令,該地塊的限制不會改變:

margins visible

什麼可能我是做錯了什麼?

回答

1

你不一定做錯了什麼。您正在使用matplotlib版本2(或更高版本)。在這個版本中,默認的繪圖佈局被改變了,所以軸的兩端都加了5%的填充。這裏的描述的情節佈局的鏈接:https://matplotlib.org/users/dflt_style_changes.html#plot-layout

從鏈接,將其改回爲「經典」的風格,使用方法:

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

工作。我將'mpl.rcParams ['axes.autolimit_mode']'留在了'data'的默認值,這符合數據極限,而不是下一個勾號(即'round_numbers'行爲)。另外,我想說的是,它與一般常識略有不同,特別要求'axis('tight')'不會摺疊這些邊距,這似乎可以在每個plot的基礎上進行(https: //stackoverflow.com/a/41748745/1143274)。 –

1

通過設置autoscale你應該看到tight=True之間所需的區別tight=False

f, (ax, ax2) = plt.subplots(ncols=2) 

ax.plot([0, 1], [1, 0], label="tight=True") 
ax.autoscale(enable=True, axis='both', tight=True) 

ax2.plot([0, 1], [1, 0], label="tight=False") 
ax2.autoscale(enable=True, axis='both', tight=False) 

ax.legend() 
ax2.legend() 

enter image description here

你可能注意到ax.axis("tight")是沒有關係的;它只有在文檔中指出

「緊」的限制設置,使得所有的數據顯示

這的確是這樣的,所有的數據顯示(它沒有說關於設置什麼查看對數據的限制)。

+0

現在這很有趣,因爲當我複製這個代碼時,我得到了兩張圖,都看起來像你的右手邊情節。然而,從線的顏色,我推斷你也使用Matplotlib 2+(除非你已經改變了Matplotlib 1.3的顏色方案?)你的'matplotlib.rcParams ['axes.xmargin']的值是多少? ? –

+1

我正在使用matplotlib 2.0.2,邊距是默認的'print matplotlib.rcParams ['axes.xmargin']#results in 0.05'。 – ImportanceOfBeingErnest

+0

解決了!自3月份以來,我沒有更新Python庫; 'matplotlib .__ version__'是''2.0.0b3''。從那時起它一定是固定的。 –