2017-07-05 72 views
1

我想爲我的科學數據創建自定義繪圖的模塊,但我不知道如何將(*arg2,**kwarg2)類型的參數傳遞給方法。如何將(* args,** kwargs)類型的屬性傳遞給類中的函數?

下面是相關代碼:

import numpy as np 
import matplotlib.pyplot as plt 

# class of figures for channel flow 
# with one subfigure 

class Homfig: 

    # *args: list of plot features for ax1.plot 
    #  (xdata,ydata,str linetype,str label) 
    # **kwargs: list of axes features for ax1.set_$(STH) 
    #  possible keys: 
    #  title,xlabel,ylabel,xlim,ylim,xscale,yscale 

    def __init__(self,*args,**kwargs): 
     self.args = args 
     self.kwargs = kwargs 
     self.fig = plt.figure() 
     self.ax = self.fig.add_subplot(111) 

     for key, val in self.kwargs.iteritems(): 
      getattr(self.ax,'set_'+key)(val) 

    def hdraw(self): 
     for arg in self.args: 
      self.ax.plot(*arg) 
      leg = self.ax.legend(loc=4) 

的問題是,arg本身就像(*agr2,**kwarg2)一個元組,當我打電話 self.ax.plot(* ARG) 它不會看到一個名爲變量。 功能hdraw應該從init獲得的輸入*args上運行,繪圖行數據通過arg。 我該如何表達arg由未命名變量和已命名變量組成? self.ax.plot可稱爲多於一次,當我想有幾行

我打電話從其他python腳本的模塊(具有不同labellinetype等,在一個情節。):

meanfig = hfig.Homfig((datax,datay),title='test plot') 
meanfig.hdraw() 

如何添加像標籤或線型的self.ax.plot功能,例如:

meanfig = hfig.Homfig((datax,datay,label="test_label",linetype ='o'),title='test plot') 
+0

可能重複[將所有參數傳遞給另一個函數](https://stackoverflow.com/questions/42499656/pass-all-arguments-of-a-function-to-another-function) –

回答

1

你應該能夠使用雙**通過他們,即

def hdraw(self): 
    self.ax.plot(*self.args, **self.kwargs) 
    leg = self.ax.legend(loc=4) 

,然後使用

meanfig = hfig.Homfig(datax, datay, label="test_label", linetype ='o', title='test plot') 

更新根據評論稱之爲:

如果你想畫在同一圖多條曲線,這將是很難在你寫的方式,但你可以做這樣的

class Homfig: 
    def __init__(self, title): 
     self.fig = plt.figure() 
     self.ax = self.fig.add_subplot(111) 

     self.args = [] 
     self.kwargs = [] 

    def add_plot(self, *args, **kwargs): 
     self.args.append(args) 
     self.kwargs.append(kwargs) 

    def hdraw(self): 
     for args, kwargs in zip(self.args, self.kwargs): 
      self.ax.plot(*args, **kwargs) 
     leg = self.ax.legend(loc=4) 

,然後使用調用它

meanfig = hfig.Homfig(title='test plot') 
meanfig.add_plot(datax, datay, label="test_label", linetype ='o') 
meanfig.add_plot(datax, 2 * datay, label="test_label_2", linetype ='o') 
meanfig.hdraw() 
+0

在這裏,'kwargs'用於軸變量。我想在一個圖中放置幾個​​圖,所以會有多個「self.ax.plot」調用請求。 – Maria

+1

請參閱更新後的答案以獲取相關信息。可悲的是,只有在'__init__'方法中才能很好地完成這項工作。 –

相關問題