我正在制作自定义绘图配置函数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()
答案 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'})