2013-09-24 57 views
3

我正在編寫一堆用於處理天文數據的腳本和函數。我有一組星系,爲此我想在3個面板的情節中繪製一些不同的屬性。我這裏有佈局的例子:現在在大圖中嵌入matplotlib圖

enter image description here

,這是沒有問題的。但有時候,我想爲一個單一的星系創建這個圖。在其他情況下,我想打一個更大的陰謀,包括每一個都是由三個+面板結構的次要情節的,像這樣的樣機:

enter image description here

對於我的代碼模塊化和可重用的緣故,我想做些什麼來讓我的函數返回一個matplotlib.figure.Figure對象,然後讓調用者函數或交互式會話決定對象是show()savefig,還是將它嵌入到更大的圖中。但我似乎無法在文檔或其他地方找到任何提示,似乎並非人們經常這樣做。

任何關於什麼是最好的道路的建議?我推測是否使用axes_grid是解決方案,但它似乎並不相當清潔和來電不可知論對我來說。有什麼建議麼?

+0

http://stackoverflow.com/questions/16750333/how-do-i-include-a-matplotlib-figure-object-as-subplot/16754215#16754215 – tacaswell

回答

2

最好的解決方案是將圖形佈局邏輯從繪圖邏輯中分離出來。所以,現在

def three_panel_plot(data, ploting_args, ax1, ax2, ax3): 
    # what you do to plot 

,輪流數據的代碼 - >圖像需要作爲參數數據,並在它應該繪製這些數據太:寫你的繪圖代碼是這樣的。

如果你只想做一個,很容易,如果你想做一個3x3網格,你只需要生成佈局,然後循環軸集+數據。

你建議的方式(從繪圖程序中返回一個對象)在matplotlib中非常困難,內部連接太緊。

+2

謝謝你,這是我落得這樣做。 儘管它確實讓我有些挫敗,但能夠從數字中構建一個像他們是軸的圖很好...... – Thriveth

+1

這樣做(我認爲)需要重新考慮後端工作方式。也就是說,我已經說服了我自己,這種方式比「超級人物」更模塊化。如果您將簽名命令爲「def my_plot(ax,* args,** kwargs)」,則它們與內置繪圖命令的預期簽名樣式相匹配。這個問題已經足夠了(我已經回答了2到3次的變化)我應該在某個地方寫出一個規範的例子。 – tacaswell