2017-07-05 6 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(*引数) を呼び出すとき、それは名前の変数を見ていないということです。 関数hdrawは、initから入力された*argsの入力に作用し、プロットラインのデータはargに渡されます。 argは名前のない変数と名前付きの変数で構成されているとはどうでしょうか? self.ax.plotは、私はいくつかのラインを持つようにしたいときは、もう一度呼び出すことができ

は、私は他のPythonスクリプトからのモジュールを呼び出す(1つのプロットに、などさまざま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') 

Updateを使用してそれを呼び出す:

をあなたが書いた方法では難しいでしょう。同図では複数のプロットを、描きたい場合は、しかし、あなたはこの

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'は軸変数に使われます。 1つの図に複数のプロットを入れたいので、 'self.ax.plot'の呼び出しが複数回あります – Maria

+1

これを行う方法については、更新された答えを見てください。残念なことに、 '__init__'メソッドでのみ行うのは、うまくやるのが難しいでしょう。 –

関連する問題