Python& Matplotlib:如何将dict传递给函数?

时间:2016-06-02 07:57:01

标签: python matplotlib

我正在制作自定义绘图配置函数plt_configure,因此我可以将标签,图例和其他绘图选项与一个命令结合使用。

对于传奇,我想做类似的事情:

plt_configure(legend={loc: 'best'})
# => plt.legend(loc='best')
plt_configure(legend=True)
# => plt.legend()

然后我应该如何定义函数?

现在我将函数定义为:

def plt_configure(xlabel='', ylabel='', legend=False):
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    if legend:
        # if legend passed as options
            plt.legend(options)

或者我的功能设计不好,考虑上述两种情况会有什么好的设计?             #else                 plt.legend()

4 个答案:

答案 0 :(得分:4)

空字典将评估为False,非空字典将评估为True。因此,无论if legend是dict还是布尔值,都可以使用legend

然后您可以测试legend是否为dict,并将其传递给plt.legend

def plt_configure(xlabel='', ylabel='', legend=False):
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    if legend:
        if isinstance(legend, dict):
            plt.legend(**legend)
        else:
            plt.legend()

答案 1 :(得分:2)

在关键字参数中使用None,因为图例将是dict对象(不是布尔实例),然后检查图例是否是字典实例:

def plt_configure(xlabel='', ylabel='', legend=None):
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    if legend and isinstance(legend, dict):
        # get options then...
        plt.legend(options)

答案 2 :(得分:2)

Moses Koledoye的答案很好,但是如果你想将其他选项传递给传奇,你也想将它们传递给你的函数:

def plt_configure(xlabel, ylabel, legend, *args, **kwargs):
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    if legend:
        plt.legend(*args, **kwargs)

这样您可以将任意参数和/或关键字传递给图例函数

答案 3 :(得分:1)

我加入到早期答案中,但我认为,检查“无”必须有效,而legend dict必须用作kwargs

def plt_configure(xlabel='', ylabel='', legend=None):
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    if not(legend is None): plt.legend(**legend)

...

plt_configure(xlabel='x', ylabel='y', legend={'loc': 'best','mode': 'expand'})