将任意(未使用的)关键字参数传递给matplotlib

时间:2018-05-06 00:53:39

标签: python matplotlib

我正在编写一个使用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关键字?

1 个答案:

答案 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