Fonts¶
dartwork-mpl ships 20 publication-ready fonts, registered
with matplotlib the moment you import dartwork_mpl. Browse them below,
preview your own text, and copy a ready-to-paste font.family setup.
Font browser¶
Type your own preview text, narrow by script or style, and open any font
for its weight ladder and a ready-to-paste rcParams snippet. Every sample
is drawn by the font’s own bundled file — what you see here is exactly
what your chart will render.
Star a card to pin it, and pinned fonts stack in the bottom tray rendering the same sentence at the same size. Type your own sentence in the preview field and every card and the tray retype it, so you can weigh finalists on your real copy.
Finalists — same sentence, same size.
How registration works¶
dartwork-mpl bundles 262 text font files organized into 22 documented
file groups. Matplotlib registers those files as 20 matplotlib family names
on import dartwork_mpl, with bundled copies promoted ahead of
same-named system fonts. Condensed and SemiCondensed Noto Sans files register
as Noto Sans with width metadata, so they are documented as file groups rather
than separate font.family names.
The family names below are the names to put in font.family. For every weight
and specimen sheet, see Fonts.
Quick Start¶
import dartwork_mpl as dm
import matplotlib.pyplot as plt
dm.style.use("scientific") # Roboto-led default chain
plt.rcParams["font.family"] = ["Inter", "Roboto", "Noto Sans Math"]
fig, ax = plt.subplots(figsize=dm.figsize("13cm", "standard"))
ax.set_title("Publication-ready title", fontsize=dm.fs(3), fontweight=dm.fw(2))
ax.set_xlabel("X axis", fontsize=dm.fs(0), fontweight=dm.fw(0))
ax.set_ylabel("Y axis", fontsize=dm.fs(0), fontweight=dm.fw(0))
dm.simple_layout(fig)
Use relative helpers for typography that tracks the active preset:
ax.text(
0.5,
0.5,
"annotation",
fontsize=dm.fs(-1),
fontweight=dm.fw(1),
)
For monospace Latin plus monospaced Hangul, lead with the Latin mono and keep D2Coding as the Korean fallback:
plt.rcParams["font.family"] = ["JetBrains Mono", "D2Coding"]
The three serif fonts are deliberately opt-in; use one when a journal, report, or book needs a serif voice:
plt.rcParams["font.family"] = ["Source Serif 4", "Noto Sans Math"]
Roles¶
The browser’s role badges follow this table; use it as the print-friendly summary.
Role |
Default |
Alternates |
When to pick |
|---|---|---|---|
Body |
Roboto |
Inter, IBM Plex Sans, Source Sans 3, Noto Sans |
General chart labels, ticks, legends, and captions. |
Display |
Inter Display |
— |
Large titles, section heads, and poster-scale numbers. |
Korean body |
Paperlogy |
Pretendard, Noto Sans CJK KR |
Hangul-first and bilingual figures. |
Serif |
Source Serif 4 |
Noto Serif, IBM Plex Serif |
Opt-in journal, report, or book figures that need a serif voice. |
Mono |
JetBrains Mono |
IBM Plex Mono, Roboto Mono, Source Code Pro |
Code, timestamps, aligned values, and dense numeric columns. |
Korean mono |
D2Coding |
— |
Monospaced Hangul code blocks and aligned Korean tables. |
Fallback tail |
Noto Sans Math |
Noto Sans Symbols, Noto Sans Symbols 2 |
Math operators, arrows, signs, and symbol coverage at the end of the fallback chain. |
Typography Matrix¶
| Family | Role | Weights | Aligned digits | tnum available | Chart glyphs | Hangul | License |
|---|---|---|---|---|---|---|---|
| Roboto | body | 100, 200, 300, 400, 500, 600, 700, 800, 900 | digits | yes | 7/8 −×±°μσΔ | - | OFL-1.1 |
| Inter | body | 100, 200, 300, 400, 500, 600, 700, 800, 900 | - | yes | 8/8 −×±→°μσΔ | - | OFL-1.1 |
| IBM Plex Sans | body | 100, 200, 300, 400, 500, 600, 700 | digits | - | 8/8 −×±→°μσΔ | - | OFL-1.1 |
| Source Sans 3 | body | 200, 300, 400, 500, 600, 700, 900 | digits | - | 8/8 −×±→°μσΔ | - | OFL-1.1 |
| Noto Sans | body | 100, 200, 300, 400, 500, 600, 700, 800, 900 | digits | yes | 7/8 −×±°μσΔ | - | OFL-1.1 |
| Inter Display | display | 100, 200, 300, 400, 500, 600, 700, 800, 900 | - | yes | 8/8 −×±→°μσΔ | - | OFL-1.1 |
| Paperlogy | kr-body | 250, 300, 400, 500, 600, 700, 800, 900 | digits | - | 5/8 −×±→° | yes | OFL-1.1 |
| Pretendard | kr-body | 100, 200, 300, 400, 500, 600, 700, 800, 900 | - | yes | 8/8 −×±→°μσΔ | yes | OFL-1.1 |
| Noto Sans CJK KR | kr-body | 400 | digits | - | 3/8 ×±° | yes | OFL-1.1 |
| Source Serif 4 | serif | 200, 300, 400, 600, 700, 900 | digits | yes | 8/8 −×±→°μσΔ | - | OFL-1.1 |
| Noto Serif | serif | 100, 200, 300, 400, 500, 600, 700, 800, 900 | digits | yes | 7/8 −×±°μσΔ | - | OFL-1.1 |
| IBM Plex Serif | serif | 100, 200, 300, 400, 500, 600, 700 | digits | - | 8/8 −×±→°μσΔ | - | OFL-1.1 |
| JetBrains Mono | mono | 100, 200, 300, 400, 500, 600, 700, 800 | mono | - | 8/8 −×±→°μσΔ | - | OFL-1.1 |
| IBM Plex Mono | mono | 100, 200, 300, 400, 500, 600, 700 | mono | - | 5/8 −×±→° | - | OFL-1.1 |
| Roboto Mono | mono | 100, 200, 300, 400, 500, 600, 700 | mono | - | 7/8 −×±°μσΔ | - | OFL-1.1 |
| Source Code Pro | mono | 200, 300, 400, 500, 600, 700, 900 | mono | - | 8/8 −×±→°μσΔ | - | OFL-1.1 |
| D2Coding | mono-kr | 400, 700 | mono | - | 8/8 −×±→°μσΔ | yes | OFL-1.1 |
| Noto Sans Math | fallback-tail | 400 | digits | - | 8/8 −×±→°μσΔ | - | OFL-1.1 |
| Noto Sans Symbols | fallback-tail | 400 | digits | - | 4/8 −×→° | - | OFL-1.1 |
| Noto Sans Symbols 2 | fallback-tail | 400 | digits | - | 3/8 −×° | - | OFL-1.1 |
Full Specimens¶
The full static specimen catalog lives in Fonts. For the reasoning behind the font roles, fallback chain, and numeric-axis gates, see Design rationale › Typography.