2012-11-08 46 views
1

我試圖做可能會這樣寫:指定函數matplotlib圖形和座標軸的慣用方法是什麼?

import pylab 
class GetsDrawn(object): 
    def __init__(self): 
     self.x=some_function_that_returns_an_array() 
     self.y=some_other_function_that_returns_an_array() 

    # verison 1: pass in figure/subplot arguments 
    def draw(self, fig_num, subplot_args): 
     pylab.figure(fig_num) 
     pylab.subplot(*subplot_args) 
     pylab.scatter(self.x, self.y) 

即我可以告訴對象「其中」通過一個數字號碼和次要情節構畫本身。

我懷疑一個通過pylab對象的版本在 長期運行中會更靈活,但不知道提供給函數的對象類型。

回答

1

對於腳本,通常最好使用面向對象的api。

例如,你可以讓你的函數得到一個數字:

def draw(fig, sub_plot_args,x,y): 
    ax = fig.subplot(*sub_plot_args) 
    ax.scatter(x,y) 

如果你的函數實際上只消耗一個軸,你甚至可以傳遞,作爲一個對象:

def draw(ax,x,y): 

    ax.scatter(x,y) 

要創建一個數字使用:

import matplotlib.pyplot as plt 
fig = plt.figure() 

並創建例如一個圖上有一個子圖,使用:

fig, ax = plt.subplots() 

如果我沒有弄錯,最後的命令只存在於最近的版本中。

1

我會初始化所有在__init__的軸。將它們保存在列表中,例如self.ax。然後在draw方法,你可以直接發送繪圖命令到所需的軸對象:

import matplotlib.pyplot as plt 

class GetsDrawn(object): 
    def __init__(self): 
     self.x=some_function_that_returns_an_array() 
     self.y=some_other_function_that_returns_an_array() 
     self.ax = [] 
     for i in range(num_figures): 
      fig = plt.figure(i) 
      self.ax.append(plt.subplot(1, 1, 1)) 

    # verison 1: pass in figure/subplot arguments 
    def draw(self, fig_num, subplot_args): 
     ax = self.ax[fig_num] 
     ax.subplot(*subplot_args) 
     ax.scatter(self.x, self.y) 

順便說一句,pylab是正常的互動環節,但pyplotrecommend for scripts

相關問題