2011-08-18 29 views
15

因此,在figure中已添加了三個垂直子圖和add_subplot,我該如何選擇我們說的中間圖?如何以編程方式在Matplotlib中選擇特定的子圖?

現在我做這個list解析:

[r[0] for r in sorted([[ax, ax.get_geometry()[2]] for ax in self.figure.get_axes()], key=itemgetter(1))]

在那裏我可以簡單地選擇我想要的指數,與相應的axes。有沒有更直接的方式來做到這一點?

回答

14

matplotlib documentation

如果這個數字已經與鍵(參數,kwargs)次要情節,然後它會簡單地作出這樣的插曲電流和返回。

下面是一個例子:

import matplotlib.pyplot as plt 

fig = plt.figure() 
for vplot in [1,2,3]: 
    ax = fig.add_subplot(3,1,vplot) 
    ax.plot(range(10),range(10)) 

ax_again = fig.add_subplot(3,1,2) 
ax_again.annotate("The middle one",xy=(7,5),xytext=(7,5)) 

plt.show() 

中間的情節被再次調用,以便它可以被註解。

如果我使用原始通話設置背景,如果第二次獲取子圖時需要重新設置背景嗎?

是的。原始調用的參數和關鍵字用於創建唯一標識符。因此,爲了再次生成此唯一標識符,您需要再次傳遞相同的參數(網格定義,位置)和關鍵字。例如:

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(2,1,1,axisbg='red') 
ax.plot(range(10),range(10)) 
ax = fig.add_subplot(2,1,2) 
ax.plot(range(10),range(10)) 

ax_again = fig.add_subplot(2,1,1,axisbg='red') 
ax_again.annotate("The top one",xy=(7,5),xytext=(7,5)) 

plt.show() 

如果我用ax_again.change_geometry()

你會想到change_geometry,例如,從312到422,會改變你使用add_subplot的方式,但它不會。當您調用change_geometry時,似乎存在錯誤或未定義的行爲。使用參數和關鍵字生成的第一個add_subplot調用的原始唯一鍵不會更新。因此,如果要使用add_subplot調用返回軸,則需要使用原始參數和關鍵字調用add_subplot。欲瞭解更多信息,請按照這個問題報告: https://github.com/matplotlib/matplotlib/issues/429

我現在的猜測是,如果你改變任何屬性的副圖產生後,與add_subplot調用,唯一不會被調整。所以只要使用原始的參數和關鍵字,並希望這會奏效。

+3

男人我花了數小時閱讀那些文檔,但我仍然設法忽略了這個重要部分。謝謝 – c00kiemonster

+1

我希望我能從裏面理解matplotlib。這絕對會讓我的工作更輕鬆。我花了一段時間,從文檔中梳理出這些細節絕非易事。 我試圖看看你是否在最初的調用中傳遞了kwargs,你是否必須像第二次提示一樣在第二次傳遞它們。如果我想出任何東西,我會更新。 – Yann

+1

所以事實證明,這個人物類有一個私人成員函數_make_key'(使)args和kwargs'的可哈希鍵';這用於識別子圖(我猜所有的座標軸都屬於圖)。所以是的,你需要精確地使用相同的參數和關鍵字。 – Yann

相關問題