Search code examples
pythonmatplotlibtextcustomizationlegend

Styling part of label in legend in matplotlib


Is it possible to have part of the text of a legend in a particular style, let's say, bold or italic?


Solution

  • As silvado mentions in his comment, you can use LaTeX rendering for more flexible control of the text rendering. See here for more information: http://matplotlib.org/users/usetex.html

    An example:

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import rc
    
    # activate latex text rendering
    rc('text', usetex=True)
    
    x = np.arange(10)
    y = np.random.random(10)
    z = np.random.random(10)
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot(x, y, label = r"This is \textbf{line 1}")
    ax.plot(x, z, label = r"This is \textit{line 2}")
    ax.legend()
    plt.show()
    

    enter image description here

    Note the 'r' before the strings of the labels. Because of this the \ will be treated as a latex command and not interpreted as python would do (so you can type \textbf instead of \\textbf).