我遇到的问题与此非常相似:
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_markeredgecolor
和set_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()
现在我希望图例中的符号全黑。我该怎么办?
答案 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()