matplotlib.font_manager

A module for finding, managing, and using fonts across platforms.

This module provides a single FontManager instance that can be shared across backends and platforms. The findfont function returns the best TrueType (TTF) font file in the local or system font path that matches the specified FontProperties instance. The FontManager also handles Adobe Font Metrics (AFM) font files for use by the PostScript backend.

The design is based on the W3C Cascading Style Sheet, Level 1 (CSS1) font specification. Future versions may implement the Level 2 or 2.1 specifications.

class matplotlib.font_manager.FontEntry(fname='', name='', style='normal', variant='normal', weight='normal', stretch='normal', size='medium')[source]

Bases: object

A class for storing Font properties. It is used when populating the font lookup dictionary.

class matplotlib.font_manager.FontManager(size=None, weight='normal')[source]

Bases: object

On import, the FontManager singleton instance creates a list of ttf and afm fonts and caches their FontProperties. The FontManager.findfont method does a nearest neighbor search to find the font that most closely matches the specification. If no good enough match is found, the default font is returned.

addfont(path)[source]

Cache the properties of the font at path to make it available to the FontManager. The type of font is inferred from the path suffix.

Parameters:
pathstr or path-like
property defaultFont
findfont(prop, fontext='ttf', directory=None, fallback_to_default=True, rebuild_if_missing=True)[source]

Find a font that most closely matches the given font properties.

Parameters:
propstr or FontProperties

The font properties to search for. This can be either a FontProperties object or a string defining a fontconfig patterns.

fontext{'ttf', 'afm'}, default: 'ttf'

The extension of the font file:

  • 'ttf': TrueType and OpenType fonts (.ttf, .ttc, .otf)
  • 'afm': Adobe Font Metrics (.afm)
directorystr, optional

If given, only search this directory and its subdirectories.

fallback_to_defaultbool

If True, will fallback to the default font family (usually "DejaVu Sans" or "Helvetica") if the first lookup hard-fails.

rebuild_if_missingbool

Whether to rebuild the font cache and search again if the first match appears to point to a nonexisting font (i.e., the font cache contains outdated entries).

Returns:
str

The filename of the best matching font.

Notes

This performs a nearest neighbor search. Each font is given a similarity score to the target font properties. The first font with the highest score is returned. If no matches below a certain threshold are found, the default font (usually DejaVu Sans) is returned.

The result is cached, so subsequent lookups don't have to perform the O(n) nearest neighbor search.

See the W3C Cascading Style Sheet, Level 1 documentation for a description of the font finding algorithm.

static get_default_size()[source]

Return the default font size.

get_default_weight()[source]

Return the default font weight.

score_family(families, family2)[source]

Return a match score between the list of font families in families and the font family name family2.

An exact match at the head of the list returns 0.0.

A match further down the list will return between 0 and 1.

No match will return 1.0.

score_size(size1, size2)[source]

Return a match score between size1 and size2.

If size2 (the size specified in the font file) is 'scalable', this function always returns 0.0, since any font size can be generated.

Otherwise, the result is the absolute distance between size1 and size2, normalized so that the usual range of font sizes (6pt - 72pt) will lie between 0.0 and 1.0.

score_stretch(stretch1, stretch2)[source]

Return a match score between stretch1 and stretch2.

The result is the absolute value of the difference between the CSS numeric values of stretch1 and stretch2, normalized between 0.0 and 1.0.

score_style(style1, style2)[source]

Return a match score between style1 and style2.

An exact match returns 0.0.

A match between 'italic' and 'oblique' returns 0.1.

No match returns 1.0.

score_variant(variant1, variant2)[source]

Return a match score between variant1 and variant2.

An exact match returns 0.0, otherwise 1.0.

score_weight(weight1, weight2)[source]

Return a match score between weight1 and weight2.

The result is 0.0 if both weight1 and weight 2 are given as strings and have the same value.

Otherwise, the result is the absolute value of the difference between the CSS numeric values of weight1 and weight2, normalized between 0.05 and 1.0.

set_default_weight(weight)[source]

Set the default font weight. The initial value is 'normal'.

class matplotlib.font_manager.FontProperties(family=None, style=None, variant=None, weight=None, stretch=None, size=None, fname=None)[source]

Bases: object

A class for storing and manipulating font properties.

The font properties are those described in the W3C Cascading Style Sheet, Level 1 font specification. The six properties are:

  • family: A list of font names in decreasing order of priority. The items may include a generic font family name, either 'serif', 'sans-serif', 'cursive', 'fantasy', or 'monospace'. In that case, the actual font to be used will be looked up from the associated rcParam.
  • style: Either 'normal', 'italic' or 'oblique'.
  • variant: Either 'normal' or 'small-caps'.
  • stretch: A numeric value in the range 0-1000 or one of 'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded' or 'ultra-expanded'.
  • weight: A numeric value in the range 0-1000 or one of 'ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'.
  • size: Either an relative value of 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large' or an absolute font size, e.g., 12.

The default font property for TrueType fonts (as specified in the default rcParams) is

sans-serif, normal, normal, normal, normal, scalable.

Alternatively, a font may be specified using the absolute path to a font file, by using the fname kwarg. However, in this case, it is typically simpler to just pass the path (as a pathlib.Path, not a str) to the font kwarg of the Text object.

The preferred usage of font sizes is to use the relative values, e.g., 'large', instead of absolute font sizes, e.g., 12. This approach allows all text sizes to be made larger or smaller based on the font manager's default font size.

This class will also accept a fontconfig pattern, if it is the only argument provided. This support does not depend on fontconfig; we are merely borrowing its pattern syntax for use here.

Note that Matplotlib's internal font manager and fontconfig use a different algorithm to lookup fonts, so the results of the same pattern may be different in Matplotlib than in other applications that use fontconfig.

copy()[source]

Return a copy of self.

get_family()[source]

Return a list of font names that comprise the font family.

get_file()[source]

Return the filename of the associated font.

get_fontconfig_pattern()[source]

Get a fontconfig pattern suitable for looking up the font as specified with fontconfig's fc-match utility.

This support does not depend on fontconfig; we are merely borrowing its pattern syntax for use here.

get_name()[source]

Return the name of the font that best matches the font properties.

get_size()[source]

Return the font size.

get_size_in_points()[source]
get_slant()

Return the font style. Values are: 'normal', 'italic' or 'oblique'.

get_stretch()[source]

Return the font stretch or width. Options are: 'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded'.

get_style()[source]

Return the font style. Values are: 'normal', 'italic' or 'oblique'.

get_variant()[source]

Return the font variant. Values are: 'normal' or 'small-caps'.

get_weight()[source]

Set the font weight. Options are: A numeric value in the range 0-1000 or one of 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'

set_family(family)[source]

Change the font family. May be either an alias (generic name is CSS parlance), such as: 'serif', 'sans-serif', 'cursive', 'fantasy', or 'monospace', a real font name or a list of real font names. Real font names are not supported when rcParams["text.usetex"] (default: False) is True.

set_file(file)[source]

Set the filename of the fontfile to use. In this case, all other properties will be ignored.

set_fontconfig_pattern(pattern)[source]

Set the properties by parsing a fontconfig pattern.

This support does not depend on fontconfig; we are merely borrowing its pattern syntax for use here.

set_name(family)

Change the font family. May be either an alias (generic name is CSS parlance), such as: 'serif', 'sans-serif', 'cursive', 'fantasy', or 'monospace', a real font name or a list of real font names. Real font names are not supported when rcParams["text.usetex"] (default: False) is True.

set_size(size)[source]

Set the font size. Either an relative value of 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large' or an absolute font size, e.g., 12.

set_slant(style)

Set the font style. Values are: 'normal', 'italic' or 'oblique'.

set_stretch(stretch)[source]

Set the font stretch or width. Options are: 'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded' or 'ultra-expanded', or a numeric value in the range 0-1000.

set_style(style)[source]

Set the font style. Values are: 'normal', 'italic' or 'oblique'.

set_variant(variant)[source]

Set the font variant. Values are: 'normal' or 'small-caps'.

set_weight(weight)[source]

Set the font weight. May be either a numeric value in the range 0-1000 or one of 'ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'

class matplotlib.font_manager.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)[source]

Bases: matplotlib.font_manager._JSONEncoder

[Deprecated]

Notes

Deprecated since version 3.2:

Constructor for JSONEncoder, with sensible defaults.

If skipkeys is false, then it is a TypeError to attempt encoding of keys that are not str, int, float or None. If skipkeys is True, such items are simply skipped.

If ensure_ascii is true, the output is guaranteed to be str objects with all incoming non-ASCII characters escaped. If ensure_ascii is false, the output can contain non-ASCII characters.

If check_circular is true, then lists, dicts, and custom encoded objects will be checked for circular references during encoding to prevent an infinite recursion (which would cause an OverflowError). Otherwise, no such check takes place.

If allow_nan is true, then NaN, Infinity, and -Infinity will be encoded as such. This behavior is not JSON specification compliant, but is consistent with most JavaScript based encoders and decoders. Otherwise, it will be a ValueError to encode such floats.

If sort_keys is true, then the output of dictionaries will be sorted by key; this is useful for regression tests to ensure that JSON serializations can be compared on a day-to-day basis.

If indent is a non-negative integer, then JSON array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. None is the most compact representation.

If specified, separators should be an (item_separator, key_separator) tuple. The default is (', ', ': ') if indent is None and (',', ': ') otherwise. To get the most compact JSON representation, you should specify (',', ':') to eliminate whitespace.

If specified, default is a function that gets called for objects that can't otherwise be serialized. It should return a JSON encodable version of the object or raise a TypeError.

matplotlib.font_manager.afmFontProperty(fontpath, font)[source]

Extract information from an AFM font file.

Parameters:
fontAFM

The AFM font file from which information will be extracted.

Returns:
FontEntry

The extracted font properties.

matplotlib.font_manager.createFontList(fontfiles, fontext='ttf')[source]

[Deprecated] Create a font lookup list. The default is to create a list of TrueType fonts. An AFM font list can optionally be created.

Notes

Deprecated since version 3.2.

matplotlib.font_manager.findSystemFonts(fontpaths=None, fontext='ttf')[source]

Search for fonts in the specified font paths. If no paths are given, will use a standard set of system paths, as well as the list of fonts tracked by fontconfig if fontconfig is installed and available. A list of TrueType fonts are returned by default with AFM fonts as an option.

matplotlib.font_manager.findfont(prop, fontext='ttf', directory=None, fallback_to_default=True, rebuild_if_missing=True)

Find a font that most closely matches the given font properties.

Parameters:
propstr or FontProperties

The font properties to search for. This can be either a FontProperties object or a string defining a fontconfig patterns.

fontext{'ttf', 'afm'}, default: 'ttf'

The extension of the font file:

  • 'ttf': TrueType and OpenType fonts (.ttf, .ttc, .otf)
  • 'afm': Adobe Font Metrics (.afm)
directorystr, optional

If given, only search this directory and its subdirectories.

fallback_to_defaultbool

If True, will fallback to the default font family (usually "DejaVu Sans" or "Helvetica") if the first lookup hard-fails.

rebuild_if_missingbool

Whether to rebuild the font cache and search again if the first match appears to point to a nonexisting font (i.e., the font cache contains outdated entries).

Returns:
str

The filename of the best matching font.

Notes

This performs a nearest neighbor search. Each font is given a similarity score to the target font properties. The first font with the highest score is returned. If no matches below a certain threshold are found, the default font (usually DejaVu Sans) is returned.

The result is cached, so subsequent lookups don't have to perform the O(n) nearest neighbor search.

See the W3C Cascading Style Sheet, Level 1 documentation for a description of the font finding algorithm.

matplotlib.font_manager.get_font(filename, hinting_factor=None)[source]
matplotlib.font_manager.get_fontconfig_fonts(fontext='ttf')[source]

List font filenames known to fc-list having the given extension.

matplotlib.font_manager.get_fontext_synonyms(fontext)[source]

Return a list of file extensions extensions that are synonyms for the given file extension fileext.

matplotlib.font_manager.is_opentype_cff_font(filename)[source]

Return whether the given font is a Postscript Compact Font Format Font embedded in an OpenType wrapper. Used by the PostScript and PDF backends that can not subset these fonts.

matplotlib.font_manager.json_dump(data, filename)[source]

Dump FontManager data as JSON to the file named filename.

See also

json_load

Notes

File paths that are children of the Matplotlib data path (typically, fonts shipped with Matplotlib) are stored relative to that data path (to remain valid across virtualenvs).

This function temporarily locks the output file to prevent multiple processes from overwriting one another's output.

matplotlib.font_manager.json_load(filename)[source]

Load a FontManager from the JSON file named filename.

See also

json_dump
matplotlib.font_manager.list_fonts(directory, extensions)[source]

Return a list of all fonts matching any of the extensions, found recursively under the directory.

matplotlib.font_manager.ttfFontProperty(font)[source]

Extract information from a TrueType font file.

Parameters:
fontFT2Font

The TrueType font file from which information will be extracted.

Returns:
FontEntry

The extracted font properties.

matplotlib.font_manager.win32FontDirectory()[source]

Return the user-specified font directory for Win32. This is looked up from the registry key

\\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Fonts

If the key is not found, %WINDIR%\Fonts will be returned.

matplotlib.font_manager.win32InstalledFonts(directory=None, fontext='ttf')[source]

Search for fonts in the specified font directory, or use the system directories if none given. Additionally, it is searched for user fonts installed. A list of TrueType font filenames are returned by default, or AFM fonts if fontext == 'afm'.