Is there a way to change the font color of the legend in a matplotlib plot?
Specially in occasions where the background of the plot is dark, the default black text in the legend is hard or impossible to read.
You can also do it with setp():
import pylab as plt
leg = plt.legend(framealpha = 0, loc = 'best')
for text in leg.get_texts():
plt.setp(text, color = 'w')
this method also allows you to set the fontsize and any number of other font properties in one line (listed here: http://matplotlib.org/users/text_props.html)
full example:
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()
As of matplotlib version 3.3.0, you can now directly use the keyword argument labelcolor
in matplotlib.pyplot.legend()
.
Example using the same color as the corresponding artist by setting labelcolor='linecolor'
:
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')
Example changing all text to white by setting labelcolor='w'
, e.g. for dark backgrounds:
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')
prop
matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend - tacaswell