1
- All about Matplotlib and Fonts!
1
+ Fonts in Matplotlib Text Engine
2
2
===============================
3
3
4
- The story of fonts has been quite eventful throughout time. It involves
5
- contributions of tech giants such as the likes of Adobe, Apple and Microsoft.
4
+ Matplotlib needs fonts to work with its text engine, some of which are shipped
5
+ alongside the installation. Users can configure the default fonts, or even
6
+ provide their own custom fonts! Follow this guide.
6
7
7
- Types
8
- -----
9
- In practice, there are 3 types Matplotlib supports (in addition to
10
- 'core fonts', more about which is explained later in the guide):
8
+ However, Matplotlib also provides an option to offload text rendering to a TeX
9
+ engine (``usetex=True ``). Consult this guide.
10
+
11
+ Fonts have a long and sometimes incompatible history in computing, leading to
12
+ different platforms supporting different types of fonts. In practice, there are
13
+ 3 types of font specifications Matplotlib supports (in addition to 'core
14
+ fonts', more about which is explained later in the guide):
11
15
12
16
.. list-table :: Type of Fonts
13
17
:header-rows: 1
@@ -57,13 +61,14 @@ a way that when these documents are visually scaled, the text does not appear
57
61
pixelated.
58
62
59
63
This can be achieved by virtually embedding the *whole * font file within the
60
- output document. However, this can lead to **very large documents **, wherein
61
- most of the size bandwidth is captured by that font file data.
64
+ output document. However, this can lead to very large documents, as some
65
+ fonts (for instance, CJK - Chinese/Japanese/Korean fonts) can contain a large
66
+ number of glyphs, and thus their embedded size can be quite huge.
62
67
63
- Font Subsetting is a way to embed only the * required * glyphs within the
64
- documents. Fonts can be considered as a collection of glyphs, so ultimately the
65
- goal is to find out *which * glyphs are required for a certain array of
66
- characters, and embed only those within the output.
68
+ Font Subsetting can be used before generating documents, to embed only the
69
+ * required * glyphs within the documents. Fonts can be considered as a collection
70
+ of glyphs, so ultimately the goal is to find out *which * glyphs are required
71
+ for a certain array of characters, and embed only those within the output.
67
72
68
73
.. note ::
69
74
The role of subsetter really shines when we encounter characters like **ä **
@@ -73,8 +78,8 @@ characters, and embed only those within the output.
73
78
74
79
Luckily, Matplotlib uses a fork of an external dependency called
75
80
`ttconv <https://github.com/sandflow/ttconv >`_, which helps in embedding and
76
- subsetting stuff . (however, recent versions have moved away from ttconv to pure
77
- Python for certain types: for more details visit
81
+ subsetting font data . (however, recent versions have moved away from ttconv to
82
+ pure Python for certain types: for more details visit
78
83
`these <https://github.com/matplotlib/matplotlib/pull/18370 >`_, `links <https://github.com/matplotlib/matplotlib/pull/18181 >`_)
79
84
80
85
| *Type 1 fonts are still non-subsetted* through Matplotlib. (though one will encounter these mostly via *usetex*/*dviread* in PDF backend)
0 commit comments