我写了一个函数来保存Matplotlib中的图。当我想通过调用plt.savefig(fname=path, dpi=dpi, format=ext, bbox_inches="tight")
来使用它时,我收到了以下错误。
File "/home/jruota/.local/lib/python2.7/site-packages/matplotlib/pyplot.py", line 697, in savefig
res = fig.savefig(*args, **kwargs)
File "/home/jruota/.local/lib/python2.7/site-packages/matplotlib/figure.py", line 1572, in savefig
self.canvas.print_figure(*args, **kwargs)
TypeError: print_figure() takes at least 2 arguments (5 given)
将呼叫更改为plt.savefig(path, dpi=dpi, format=ext, bbox_inches="tight")
时,不会发生此错误。我的猜测是这个错误与*
和**
参数打包和解包有关,但我不确定究竟是怎么回事。任何解释都将不胜感激。
答案 0 :(得分:4)
首先,很明显,如果
plt.savefig(path, dpi=dpi, format=ext, bbox_inches="tight")
工作正常,你可以简单地使用它。
错误来自fname
不是命名参数。 The documentation对于那些不熟悉python中的呼叫签名的人来说可能有点混乱。
签名为matplotlib.pyplot.savefig(*args, **kwargs)
,其中需要设置参数fname
,并且可以指定其他关键字参数。当然,参数不能是关键字参数。所以在
fname = "myfile.png"
plt.savefig(fname, dpi=100)
fname
是参数,而在
fname = "myfile.png"
plt.savefig(fname=fname, dpi=100)
fname
是一个关键字参数,因此找不到指定文件名的参数。
如果您愿意,可以使用自定义函数进行测试:
def f(*args,**kwargs):
print "args: ", args
print "kwargs: ", kwargs
然后
f("q", k="W") # prints args: ('q',)
# kwargs: {'k': 'W'}
,而
f(fname="q", k="W") # prints args: ()
# kwargs: {'k': 'W', 'fname': 'q'}
在后一种情况下,args
为空。