将参数传递给保存图在Matplotlib中

2024-09-29 23:32:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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")时不会发生此错误。我猜这个错误与***参数打包和解包有关,但我不确定具体是怎么回事。任何解释都将不胜感激。在


Tags: pathformathomelocal错误pltextfile
1条回答
网友
1楼 · 发布于 2024-09-29 23:32:01

首先,很明显如果

plt.savefig(path, dpi=dpi, format=ext, bbox_inches="tight")

工作正常,你可以简单地使用它。在

错误来自fname不是命名参数。The documentation对于不熟悉python中的调用签名的人来说,可能有点困惑。在

签名是matplotlib.pyplot.savefig(*args, **kwargs),其中需要设置参数fname,并且可以指定更多的关键字参数。当然,参数不能是关键字参数。所以

^{pr2}$

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为空。在

相关问题 更多 >

    热门问题