Matplotlib how to set legend's font type

后端 未结 1 1063
攒了一身酷
攒了一身酷 2021-01-05 08:16

I want to change the font type of the legend texts in Matplotlib. I know I can do something like this:

plt.legend(prop={\'family\': \'Arial\'})
相关标签:
1条回答
  • 2021-01-05 09:09

    Pass the FontProperties object (such as font below) to ax.legend via the prop parameter:

    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib.font_manager as font_manager
    
    fig, ax = plt.subplots()
    x = np.linspace(-10, 10, 100)
    ax.plot(np.sin(x)/x, label='Mexican hat')
    
    font = font_manager.FontProperties(family='Comic Sans MS',
                                       weight='bold',
                                       style='normal', size=16)
    ax.legend(prop=font)
    plt.show()
    

    On Ubuntu, you can make new fonts available to your system by running

    fc-cache -f -v /path/to/fonts/directory
    

    I'm not sure how it is done on other OSes, or how universal fc-cache is on other flavors of Unix.


    Once you've installed your font(s) so that your OS knows about them, you can cause matplotlib to regenerate its fontList by deleting the files in ~/.cache/fontconfig and ~/.cache/matplotlib.


    The ~/.cache/matplotlib/fontList.json file gives you a humanly-readable list of all the fonts matplotlib knows about. There, you'll find entries that look like this:

    {
      "weight": "bold",
      "stretch": "normal",
      "fname": "/usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf",
      "_class": "FontEntry",
      "name": "Comic Sans MS",
      "style": "normal",
      "size": "scalable",
      "variant": "normal"
    },
    

    Notice that the fname is the path to the underlying ttf file, and that there is a name property as well. You can specify the FontProperties object by the path to the ttf file:

    font = font_manager.FontProperties(fname="/usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf")
    

    or by name:

    font = font_manager.FontProperties(family='Comic Sans MS',
                                       weight='bold',
                                       style='normal', size=16)
    

    If you do not wish to install your font system-wide, you can specify the FontProperties object by fname path, thus by-passing the need to call fc-cache and messing with ~/.cache.

    0 讨论(0)
提交回复
热议问题