在pyplot

时间:2017-04-28 08:45:54

标签: python matplotlib

我遇到的问题与此非常相似:

Manually set color of points in legend

即,我想手动更改图例中显示的标记的颜色。与上述链接示例的唯一区别是,我使用plt.plot(没有可见的行,只有数据点)而不是plt.scatter。 建议的解决方案是:

ax = plt.gca()
leg = ax.get_legend()
leg.legendHandles[0].set_color('yellow')
leg.legendHandles[1].set_color('black')
然而,这对我来说并没有这样做,因为这些符号似乎不被视为该行的一部分,我猜。 set_markeredgecolorset_markerfacecolor也没有做任何事情,因为set_marker只是在图例中添加了其他标记,我认为这些符号也不被视为标记。以上都不是(set_marker}安全)引发错误或警告,他们只是不做任何事情。

说我的代码是:

import matplotlib.pyplot as plt
import numpy as np

x1 = np.random.random(10)
y1 = np.random.random(10)
x2 = np.random.random(10)
y2 = np.random.random(10)

symbolsdic = {0: 'o', 1: '^', 2: 's', 3: '*', 4: 'D', 5: '+', 6: '8', 7: 'd', 8: 'H', 9: 'v'}

for i in range(10):
    plt.plot(x1[i], y1[i], symbolsdic[i], label=str(i), color='red')
    plt.plot(x2[i], y2[i], symbolsdic[i], color='blue')    

plt.legend()

plt.show()

现在我希望图例中的符号全黑。我该怎么办?

1 个答案:

答案 0 :(得分:0)

问题在于图例处理(即图例中显示的艺术家) 实际上是图中的点。因此,在绘制完整绘图的那一刻,将恢复其颜色。

您可以通过使用原始艺术家的副本放入图例来避免这种情况。

import matplotlib.pyplot as plt
import numpy as np
import copy

x1 = np.random.random(10)
y1 = np.random.random(10)
x2 = np.random.random(10)
y2 = np.random.random(10)

symbolsdic = {0: 'o', 1: '^', 2: 's', 3: '*', 4: 'D', 5: '+', 6: '8', 7: 'd', 8: 'H', 9: 'v'}

handles = []
for i in range(10):
    h, = plt.plot(x1[i], y1[i], symbolsdic[i], label=str(i), color='red')
    plt.plot(x2[i], y2[i], symbolsdic[i], color='blue') 
    handles.append(copy.copy(h))


for h in handles:
    h.set_color("gold")

leg = plt.legend(handles=handles)
plt.show()

enter image description here