How to change fonts in matplotlib (python)?

Question:

It sounds as an easy problem but I do not find any effective solution to change the font (not the font size) in a plot made with matplotlib in python.

I found a couple of tutorials to change the default font of matplotlib by modifying some files in the folders where matplotlib stores its default font – see this blog post – but I am looking for a less radical solution since I would like to use more than one font in my plot (text, label, axis label, etc).

Asked By: SirC

||

Answers:

Say you want Comic Sans for the title and Helvetica for the x label.

csfont = {'fontname':'Comic Sans MS'}
hfont = {'fontname':'Helvetica'}

plt.title('title',**csfont)
plt.xlabel('xlabel', **hfont)
plt.show()
Answered By: aidnani8
import pylab as plb
plb.rcParams['font.size'] = 12

or

import matplotlib.pyplot as mpl
mpl.rcParams['font.size'] = 12
Answered By: nagordon

You can also use rcParams to change the font family globally.

 import matplotlib.pyplot as plt
 plt.rcParams["font.family"] = "cursive"
 # This will change to your computer's default cursive font

The list of matplotlib’s font family arguments is here.

Answered By: morepenguins

I prefer to employ:

from matplotlib import rc
#rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('font',**{'family':'serif','serif':['Times']})
rc('text', usetex=True)

The last line ensures that tick labels are also in the correct font.

Answered By: guhur

The Helvetica font does not come included with Windows, so to use it you must download it as a .ttf file.
Then you can refer matplotlib to it like this (replace “crm10.ttf” with your file):

import os
from matplotlib import font_manager as fm, rcParams
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

fpath = os.path.join(rcParams["datapath"], "fonts/ttf/cmr10.ttf")
prop = fm.FontProperties(fname=fpath)
fname = os.path.split(fpath)[1]
ax.set_title('This is a special font: {}'.format(fname), fontproperties=prop)
ax.set_xlabel('This is the default font')

plt.show()

print(fpath) will show you where you should put the .ttf.

You can see the output here:
https://matplotlib.org/gallery/api/font_file.html

Answered By: bPiMin

I use

import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "Arial"

to set the font of the entire plot.
If you want to use a different font e.g. for the title, you can use aidnani8’s solution on top of that. Setting first the default font for the figure with the line above can come handy if you want to use the same font for several items though.

Answered By: Adrian
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.