matplotlib 将图例文本颜色与散点图中的符号匹配

uqcuzwp8  于 2023-05-18  发布在  其他
关注(0)|答案(2)|浏览(149)

我用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').但我很好奇它是否可以自动作为行完成。谢谢!

ztyzrc3y

ztyzrc3y1#

散点图有面色和边色。散点的图例处理程序是PathCollection
因此,您可以在图例手柄上循环并将文本颜色设置为图例手柄的facecolor

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()

5anewei6

5anewei62#

这看起来很复杂,但确实给予了你想要的东西。欢迎提出建议。我使用ax.get_legend_handles_labels()获取标记,使用tuple(handle.get_facecolor()[0])获取matplotlib颜色元组。用一个非常简单的散点图做了一个例子,像这样:

编辑:

正如重要性欧内斯特在他的回答中指出的:

  1. leg.legendHandles将返回图例句柄;
    1.列表,而不是tuple,可以用来分配matplotlib颜色。
    代码简化为:
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()

我得到的是:

相关问题