matplotlib.font_manager
#
A module for finding, managing, and using fonts across platforms.
This module provides a single FontManager
instance, fontManager
, 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 FontManager.addfont
function adds a custom font from a file without
installing it into your operating system.
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.
- fname = ''#
- name = ''#
- size = 'medium'#
- stretch = 'normal'#
- style = 'normal'#
- variant = 'normal'#
- weight = 'normal'#
- 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 theirFontProperties
. TheFontManager.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.Fonts added with the
FontManager.addfont
method will not persist in the cache; therefore,addfont
will need to be called every time Matplotlib is imported. This method should only be used if and when a font cannot be installed on your operating system by other means.Notes
The
FontManager.addfont
method must be called on the globalFontManager
instance.Example usage:
import matplotlib.pyplot as plt from matplotlib import font_manager font_dirs = ["/resources/fonts"] # The path to the custom font file. font_files = font_manager.findSystemFonts(fontpaths=font_dirs) for font_file in font_files: font_manager.fontManager.addfont(font_file)
- 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
Notes
This method is useful for adding a custom font without installing it in your operating system. See the
FontManager
singleton instance for usage and caveats about this function.
- 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 fall back 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).
- propstr or
- 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.
- 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.
- class matplotlib.font_manager.FontProperties(family=None, style=None, variant=None, weight=None, stretch=None, size=None, fname=None, math_fontfamily=None)[source]#
Bases:
object
A class for storing and manipulating font properties.
The font properties are the six properties described in the W3C Cascading Style Sheet, Level 1 font specification and math_fontfamily for math fonts:
family: A list of font names in decreasing order of priority. The items may include a generic font family name, either 'sans-serif', 'serif', 'cursive', 'fantasy', or 'monospace'. In that case, the actual font to be used will be looked up from the associated rcParam during the search process in
findfont
. Default:rcParams["font.family"]
(default:['sans-serif']
)style: Either 'normal', 'italic' or 'oblique'. Default:
rcParams["font.style"]
(default:'normal'
)variant: Either 'normal' or 'small-caps'. Default:
rcParams["font.variant"]
(default:'normal'
)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'. Default:
rcParams["font.stretch"]
(default:'normal'
)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'. Default:
rcParams["font.weight"]
(default:'normal'
)size: Either a relative value of 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large' or an absolute font size, e.g., 10. Default:
rcParams["font.size"]
(default:10.0
)math_fontfamily: The family of fonts used to render math text. Supported values are: 'dejavusans', 'dejavuserif', 'cm', 'stix', 'stixsans' and 'custom'. Default:
rcParams["mathtext.fontset"]
(default:'dejavusans'
)
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 astr
) to the font kwarg of theText
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.
- get_family()[source]#
Return a list of individual font family names or generic family names.
The font families or generic font families (which will be resolved from their respective rcParams when searching for a matching font) in the order of preference.
- 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_math_fontfamily()[source]#
Return the name of the font family used for math text.
The default font is
rcParams["mathtext.fontset"]
(default:'dejavusans'
).
- 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_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. Can 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
) isTrue
. Default:rcParams["font.family"]
(default:['sans-serif']
)
- 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_math_fontfamily(fontfamily)[source]#
Set the font family for text in math mode.
If not set explicitly,
rcParams["mathtext.fontset"]
(default:'dejavusans'
) will be used.- Parameters:
- fontfamilystr
The name of the font family.
Available font families are defined in the default matplotlibrc file.
See also
- set_name(family)[source]#
Change the font family. Can 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
) isTrue
. Default:rcParams["font.family"]
(default:['sans-serif']
)
- set_size(size)[source]#
Set the font size.
- Parameters:
- sizefloat or {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'}, default:
rcParams["font.size"]
(default:10.0
) If a float, the font size in points. The string values denote sizes relative to the default font size.
- sizefloat or {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'}, default:
- set_slant(style)[source]#
Set the font style.
- Parameters:
- style{'normal', 'italic', 'oblique'}, default:
rcParams["font.style"]
(default:'normal'
)
- style{'normal', 'italic', 'oblique'}, default:
- set_stretch(stretch)[source]#
Set the font stretch or width.
- Parameters:
- stretchint or {'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded'}, default:
rcParams["font.stretch"]
(default:'normal'
) If int, must be in the range 0-1000.
- stretchint or {'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded'}, default:
- set_style(style)[source]#
Set the font style.
- Parameters:
- style{'normal', 'italic', 'oblique'}, default:
rcParams["font.style"]
(default:'normal'
)
- style{'normal', 'italic', 'oblique'}, default:
- set_variant(variant)[source]#
Set the font variant.
- Parameters:
- variant{'normal', 'small-caps'}, default:
rcParams["font.variant"]
(default:'normal'
)
- variant{'normal', 'small-caps'}, default:
- set_weight(weight)[source]#
Set the font weight.
- Parameters:
- weightint or {'ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'}, default:
rcParams["font.weight"]
(default:'normal'
) If int, must be in the range 0-1000.
- weightint or {'ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'}, default:
- matplotlib.font_manager.afmFontProperty(fontpath, font)[source]#
Extract information from an AFM font file.
- Parameters:
- fontpathstr
The filename corresponding to font.
- fontAFM
The AFM font file from which information will be extracted.
- Returns:
FontEntry
The extracted font properties.
- 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)[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 fall back 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).
- propstr or
- 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(font_filepaths, hinting_factor=None)[source]#
Get an
ft2font.FT2Font
object given a list of file paths.- Parameters:
- font_filepathsIterable[str, Path, bytes], str, Path, bytes
Relative or absolute paths to the font files to be used.
If a single string, bytes, or
pathlib.Path
, then it will be treated as a list with that entry only.If more than one filepath is passed, then the returned FT2Font object will fall back through the fonts, in the order given, to find a needed glyph.
- Returns:
- matplotlib.font_manager.get_fontext_synonyms(fontext)[source]#
Return a list of file 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 cannot subset these fonts.
- matplotlib.font_manager.json_dump(data, filename)[source]#
Dump
FontManager
data as JSON to the file named filename.See also
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
- 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.
- 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.fontManager[source]#
The global instance of
FontManager
.