2017-07-31 146 views
1

的目的是在一個簡單的情節插入sub_figure如下:matplotlib.pyplot.axes()參數混淆

import numpy as np 
from matplotlib import pyplot as plt 
X = np.linspace(-6, 6, 1024) 
Y = np.sinc(X) 
X_detail = np.linspace(-3, 3, 1024) 
Y_detail = np.sinc(X_detail) 
plt.plot(X, Y, c = 'k') 
sub_axes = plt.axes([0.6,0.6,0.25,0.25]) 
sub_axes.plot(X_detail, Y_detail, c = 'k') 
plt.setp(sub_axes) 
plt.show() 

上面的代碼給出以下輸出:

enter image description here

matplotlib文檔說明matplotlib.pyplot.axes()函數採用的參數是一個定義爲rect=[left, bottom, width, height]的列表,其中座標left, bottom, width, height被添加爲規範化的(0,1)值。 任何人都可以解釋給我?

最後兩個座標是sub_figure的大小,我得到了很多,現在和前兩個是什麼關係?

+1

左下角的座標? – DavidG

+0

但是那麼左下角的座標必須是(0.6,0.6)? @DavidG – User9523

+0

'plt.setp(sub_axes)'是什麼意思? –

回答

1

混淆似乎來自matplotlib使用的不同座標系統。這裏是關於這個主題的(相當詳盡的)教程的鏈接:https://matplotlib.org/users/transforms_tutorial.html。我將在這裏總結直接影響你的關鍵點。

您在座標軸上看到的座標稱爲data space or data coordinates。這基本上是陰謀的xlim和ylim。請注意,這兩個地塊完全獨立,不受數字大小或位置的影響。

當您說sub_axes = plt.axes([0.6,0.6,0.25,0.25])時,您指定圖形空間或圖形座標中的座標。這與axis space or axis coordinates在概念上非常相似,只是它適用於整個圖形而不僅僅是一組單獨的軸。

在這種情況下,相對於數字的左下角,您的子軸的原點在(0.6, 0.6)的右上角是(1, 1)。正如所料,子軸開始位於圖形窗口中間的右上方。

同樣,寬度爲(0.25, 0.25),這意味着子軸的尺寸是您的每個尺寸中的數字的1/4。這也可以解釋爲子軸的右上角在(0.85, 0.85)的空間,這看起來是正確的。

你可以做一些測試。無論您如何平移或縮放主軸,子軸都不受影響。但是,如果您調整圖形大小,則兩組座標軸都會更改大小以進行補償。由於您的尺寸大小,子軸應該始終與圖形本身具有相同的縱橫比。