如何将字典kwargs输入matplotlib传奇例程?

时间:2018-03-15 09:02:15

标签: python python-3.x dictionary matplotlib legend

我想在输出绘图之前编写一个接受图例参数字典的函数。我在下面列举了一个小例子。

进口

import numpy as np
import matplotlib.pyplot as plt

数据

x = np.linspace(0, 100, 501)
y = np.sin(x)

图例参数

legend_dict = dict(ncol=1, loc='best', fancybox=True, shadow=True)
label = 'xy data sample'
# label = None

剧情

if label is not None:
    plt.plot(x, y, label=label, **legend_dict)
else:
    plt.plot(x, y)
plt.show()

这给了我以下错误(可以通过取消注释label=None来避免这种错误。)

    plt.plot(x, y, label=label, **legend_dict) # this line
AttributeError: Unknown property shadow # this error

为什么这种方法不起作用?

2 个答案:

答案 0 :(得分:3)

您应该在调用plt.legend()时指定图例的属性,而不是plt.plot()

x = np.linspace(0, 100, 501)
y = np.sin(x)

legend_dict = dict(ncol=1, loc='best', fancybox=True, shadow=True)
label = 'xy data sample'

plt.plot(x, y, label=label)
plt.legend(**legend_dict)

plt.show()

给出了:

enter image description here

答案 1 :(得分:3)

您正试图将图例kwargs传递给绘图函数。需要单独拨打.legend()

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 100, 501)
y = np.sin(x)

legend_dict = dict(ncol=1, loc='best', fancybox=True, shadow=True)
label = 'xy data sample'
#label = None

plt.plot(x, y, label=label) 
plt.legend(**legend_dict)
plt.show()

注意也不需要if语句 - 标签为None,因为这是默认值!