如何将(*args,**kwargs)类型的属性传递给类中的函数?



我想为我的科学数据创建自定义绘图的模块,但我不知道如何将类型(*arg2,**kwarg2)的参数传递给方法。

以下是相关代码:

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可能会被调用不止一次,当我想在一个图中有几条线(具有不同的labellinetype

)。我从其他 python 脚本调用该模块:

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')

你应该能够使用双**传递它们,即

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()

最新更新