Font selection

Proplot registers several new fonts and includes tools for adding your own fonts. These features are described below.

Included fonts

Matplotlib provides a font_manager module for working with system fonts and classifies fonts into five font families: rc['font.serif'] rc['font.sans-serif'], rc['font.monospace'], rc['font.cursive'], and rc['font.fantasy']. The default font family is sans-serif, because sans-serif fonts are generally more suitable for figures than serif fonts, and the default font name belonging to this family is DejaVu Sans, which comes packaged with matplotlib.

Matplotlib uses DejaVu Sans in part because it includes glyphs for a very wide range of symbols, especially mathematical symbols. However in our opinion, DejaVu Sans is not very aesthetically pleasing. To improve the font selection while keeping things consistent across different workstations, proplot is packaged the open source TeX Gyre fonts and a few additional open source sans-serif fonts. Proplot also uses the TeX Gyre fonts as the first (i.e., default) entries for each of matplotlib’s font family lists:

After importing proplot, the default matplotlib font will be TeX Gyre Heros, which emulates the more conventional and (in our opinion) aesthetically pleasing font Helvetica. The default font family lists are shown in the default proplotrc file. To compare different fonts, use the show_fonts command with the family keyword (default behavior is family='sans-serif'). Tables of the TeX Gyre and sans-serif fonts packaged with proplot are shown below.

[1]:
import proplot as pplt
fig, axs = pplt.show_fonts(family='sans-serif')
_images/fonts_2_0.svg
[2]:
import proplot as pplt
fig, axs = pplt.show_fonts(family='tex-gyre')
_images/fonts_3_0.svg

Math text fonts

In matplotlib, math text rendered by TeX can be produced by surrounding an expression with $dollar signs$. To help math text jive better with the new default non-math text font, proplot changes rc['mathtext.fontset'] to 'custom'. This means that math is drawn with the italicized version of the non-math font (see the matplotlib math text guide for details). This generally improves the appearance of figures with simple math expressions. However, if you need unusual math symbols or complex math operators, you may want to change rc['font.name'] to something more suitable for math (e.g., the proplot-packaged font 'Fira Math' or the matplotlib-packaged font 'DejaVu Sans'; see this page for more on Fira Math). Alternatively, you can change the math text font alone by setting rc['mathtext.fontset'] back to one of matplotlib’s math-specialized font sets (e.g., 'stixsans' or 'dejavusans').

A table of math text containing the sans-serif fonts packaged with proplot is shown below. The dummy glyph “¤” is shown where a given math character is unavailable for a particular font (in practice, the fallback font rc['mathtext.fallback'] is used whenever a math character is unavailable, but show_fonts disables this fallback font in order to highlight the missing characters).

Note

Proplot modifies matplotlib’s math text internals so that the 'custom' font set can be applied with modifications to the currently active non-math font rather than only a global font family. This works by changing the default values of rc['mathtext.bf'], rc['mathtext.it'], rc['mathtext.rm'], rc['mathtext.sf'] from the global default font family 'sans' to the local font family 'regular', where 'regular' is a dummy name permitted by proplot (see the proplotrc file for details). This means that if rc['mathtext.fontset'] is 'custom' and the font family is changed for an arbitrary Text instance, then any LaTeX-generated math in the text string will also use this font family.

[3]:
import proplot as pplt
fig, axs = pplt.show_fonts(family='sans-serif', math=True)
_images/fonts_5_0.svg

Using your own fonts

You can register your own fonts by adding files to the fonts subfolder inside user_folder and calling register_fonts. This command is called on import. You can also manually pass file paths to register_fonts. To change the default font, use the rc object or modify your proplotrc. See the configuration section for details.

Sometimes the font you would like to use is installed, but the font file is not stored under the matplotlib-compatible .ttf, .otf, or .afm formats. For example, several macOS fonts are unavailable because they are stored as .dfont collections. Also, while matplotlib nominally supports .ttc collections, proplot ignores them because figures with .ttc fonts cannot be saved as PDFs. You can get matplotlib to use .dfont and .ttc collections by expanding them into individual .ttf files with the DFontSplitter application, then saving the files in-place or in the ~/.proplot/fonts folder.

To find font collections, check the paths listed in OSXFontDirectories, X11FontDirectories, MSUserFontDirectories, and MSFontDirectories under the matplotlib.font_manager module.