我制作了一个有3种不同颜色的散点图,我希望匹配符号的颜色和图例中的文字。
对于线图的情况,存在一个很好的solution:
leg = ax.legend()
# change the font colors to match the line colors:
for line,text in zip(leg.get_lines(), leg.get_texts()):
text.set_color(line.get_color())
然而,get_lines()
无法访问散点图颜色。对于3种颜色的情况,我认为我可以使用例如逐个手动设置文本颜色。 text.set_color('r')
。但我很好奇它是否能像线条一样自动完成。谢谢!
答案 0 :(得分:5)
散点图有面色和边缘色。分散的图例处理程序是PathCollection
。
因此,您可以遍历图例句柄并将文本颜色设置为图例句柄的面部颜色
for h, t in zip(leg.legendHandles, leg.get_texts()):
t.set_color(h.get_facecolor()[0])
完整代码:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
for i in range(3):
x,y = np.random.rand(2, 20)
ax.scatter(x, y, label="Label {}".format(i))
leg = ax.legend()
for h, t in zip(leg.legendHandles, leg.get_texts()):
t.set_color(h.get_facecolor()[0])
plt.show()
答案 1 :(得分:0)
这看起来很复杂但确实可以满足您的需求。欢迎提出建议。我使用ax.get_legend_handles_labels()
来获取标记并使用tuple(handle.get_facecolor()[0])
来获取matplotlib颜色元组。用这样一个非常简单的散点图做了一个例子:
ImportanceOfBeingErnest 指向answer:
leg.legendHandles
将返回图例句柄; 代码简化为:
import matplotlib.pyplot as plt
from numpy.random import rand
fig, ax = plt.subplots()
for color in ['red', 'green', 'blue']:
x, y = rand(2, 10)
ax.scatter(x, y, c=color, label=color)
leg = ax.legend()
for handle, text in zip(leg.legendHandles, leg.get_texts()):
text.set_color(handle.get_facecolor()[0])
plt.show()