如何更改图例中字体的文本颜色?

52
有没有办法在 matplotlib 绘图中更改图例的字体颜色?特别是在绘图背景为深色时,默认黑色字体可能难以或无法阅读。

你也可以通过 prop 关键字参数传递任何字体属性。http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend - tacaswell
5个回答

47

调用Legend.get_texts()将获得图例对象中的Text对象列表:

import pylab as pl
pl.plot(randn(100), label="randn")
l = legend()
for text in l.get_texts():
    text.set_color("red")

3
能否告诉我legend变量的来源呢? :) - vlad-ardelean

40

从 matplotlib 版本 3.3.0 开始,您现在可以直接在 matplotlib.pyplot.legend() 中使用关键字参数 labelcolor


例如,通过设置 labelcolor='linecolor' 使用与对应 Artist 相同的颜色:

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(4, 3))
plt.plot(np.arange(10), np.random.rand(10) * 0, '-', label='spam')
plt.plot(np.arange(10), np.random.rand(10) * 1, ':', label='ham')
plt.plot(np.arange(10), np.random.rand(10) * 2, 'o', label='eggs')
plt.legend(labelcolor='linecolor')

matplotlib legend text color: 'linecolor'


例如,通过设置labelcolor='w'将所有文本更改为白色,适用于暗色背景:

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(4, 3))
plt.plot(np.arange(10), np.random.rand(10) * 0, '-', label='spam')
plt.plot(np.arange(10), np.random.rand(10) * 1, ':', label='ham')
plt.plot(np.arange(10), np.random.rand(10) * 2, 'o', label='eggs')
plt.legend(facecolor='k', labelcolor='w')

matplotlib图例文本颜色:黑色背景下所有文本都是白色


20

由于 plt.setp 可以在可迭代对象上广播,因此您还可以在一行中修改文本颜色:

# Show some cool graphs
legend = plt.legend()
plt.setp(legend.get_texts(), color='w')

最后一行将把颜色应用到文本集合中的所有元素。


17

你也可以使用setp()来完成:

import pylab as plt

leg = plt.legend(framealpha = 0, loc = 'best')
for text in leg.get_texts():
    plt.setp(text, color = 'w')

这种方法还允许您在一行中设置字体大小和任意数量的其他字体属性(在此处列出:http://matplotlib.org/users/text_props.html

完整示例:

import pylab as plt

x = range(100)
y1 = range(100,200)
y2 = range(50,150)

fig = plt.figure(facecolor = 'k')
ax = fig.add_subplot(111, axisbg = 'k')
ax.tick_params(color='w', labelcolor='w')
for spine in ax.spines.values():
    spine.set_edgecolor('w')
ax.plot(x, y1, c = 'w', label = 'y1')
ax.plot(x, y2, c = 'g', label = 'y2')

leg = plt.legend(framealpha = 0, loc = 'best')
for text in leg.get_texts():
    plt.setp(text, color = 'w')

plt.show()

3

如果有人想要改变图例标题的颜色,似乎只能通过侧门进行:

leg._legend_title_box._text.set_color('#FFFFFF')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接