我正在编写一个使用matplotlib的小绘图函数,然后根据** kwargs中提供的用户输入进行一些调整。
这不像我预期的那样工作,因为如果在matplotlib中看不到关键字参数(看起来像在artist.py中),那么我得到一个例外。
例如:
import matplotlib.pyplot as plt
def invalid_mpl(**kwargs):
fig, ax = plt.subplots()
ax.plot([1,2,3], [-3, -2, -1], **kwargs)
return fig, ax
如果调用
,这样可以正常工作f0, a0 = invalid_mpl()
或使用有效的kwarg
f0, a0 = invalid_mpl(color='red')
但为{/ p>提出AttributeError: Unknown property my_fake_kwarg
f0, a0 = invalid_mpl(my_fake_kwarg=True)
所以我想我的问题是: 这是预期的行为吗? 2.有没有办法解析kwargs有效的matplotlib关键字?
答案 0 :(得分:0)
这是预期的行为。 matplotlib将不接受未知的关键字参数。将my_fake_kwarg
设为显式关键字参数不会解决问题。与
def valid_mpl(my_fake_kwarg=None, **kwargs):
do_something_with(my_fake_kwarg)
fig, ax = plt.subplots()
ax.plot([1,2,3], [-3, -2, -1], **kwargs)
return fig, ax
valid_mpl(my_fake_kwarg=True)
仍会产生kwargs = {'my_fake_kwarg': True}
。
完成操作后,您可以将其从kwargs
中删除。
def valid_mpl(**kwargs):
fig, ax = plt.subplots()
if 'my_fake_kwarg' in kwargs:
del kwargs['my_fake_kwarg']
ax.plot([1,2,3], [-3, -2, -1], **kwargs)
return fig, ax
或创建一个新字典以将其解压缩为ax.plot
。
def valid_mpl(**kwargs):
fig, ax = plt.subplots()
fake_kwargs = ['my_fake_kwarg']
plot_kwargs = {k: v for k, v in kwargs.items() if k not in fake_kwargs}
ax.plot([1,2,3], [-3, -2, -1], **plot_kwargs)
return fig, ax