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).
Answer #1:
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()
Answer #2:
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.
Answer #3:
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)
Answer #4:
import pylab as plb
plb.rcParams['font.size'] = 12
or
import matplotlib.pyplot as mpl
mpl.rcParams['font.size'] = 12
Answer #5:
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