Ako v Matplotlibe nastavím veľkosť písma nadpisu obrázka a označení osí?

Vytváram obrázok v Matplotlibe takto:

from matplotlib import pyplot as plt

fig = plt.figure()
plt.plot(data)
fig.suptitle('test title')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
fig.savefig('test.jpg')

Chcem určiť veľkosť písma pre nadpis obrázka a označenia osí. Potrebujem, aby mali všetky tri rôzne veľkosti písma, takže nastavenie globálnej veľkosti písma (mpl.rcParams['font.size']=x) nie je to, čo chcem. Ako môžem nastaviť veľkosť písma pre nadpis obrázka a štítky osí jednotlivo?

Riešenie

Funkcie pracujúce s textom ako label, title atď. prijímajú parametre rovnaké ako matplotlib.text.Text. Pre veľkosť písma môžete použiť size/fontsize:

from matplotlib import pyplot as plt    

fig = plt.figure()
plt.plot(data)
fig.suptitle('test title', fontsize=20)
plt.xlabel('xlabel', fontsize=18)
plt.ylabel('ylabel', fontsize=16)
fig.savefig('test.jpg')

Pre globálne nastavenie veľkosti title a label obsahuje mpl.rcParams axes.titlesize a axes.labelsize. (Zo stránky):

axes.titlesize      : large   # fontsize of the axes title
axes.labelsize      : medium  # fontsize of the x any y labels

(Pokiaľ viem, neexistuje spôsob, ako nastaviť veľkosti štítkov x a y samostatne.)

A vidím, že axes.titlesize nemá vplyv na suptitle. Myslím, že to musíte nastaviť ručne.

Komentáre (9)

Môžete to urobiť aj globálne prostredníctvom slovníka rcParams:

import matplotlib.pylab as pylab
params = {'legend.fontsize': 'x-large',
          'figure.figsize': (15, 5),
         'axes.labelsize': 'x-large',
         'axes.titlesize':'x-large',
         'xtick.labelsize':'x-large',
         'ytick.labelsize':'x-large'}
pylab.rcParams.update(params)
Komentáre (5)

Ak ste viac zvyknutí používať objekty ax na vykresľovanie, možno si ľahšie zapamätáte ax.xaxis.label.set_size(), alebo aspoň ľahšie nájdete pomocou tabulátora v termináli ipythonu. Zdá sa, že na to, aby ste videli efekt, je potrebné po ňom vykonať operáciu prekreslenia. Napríklad:

import matplotlib.pyplot as plt

# set up a plot with dummy data
fig, ax = plt.subplots()
x = [0, 1, 2]
y = [0, 3, 9]
ax.plot(x,y)

# title and labels, setting initial sizes
fig.suptitle('test title', fontsize=12)
ax.set_xlabel('xlabel', fontsize=10)
ax.set_ylabel('ylabel', fontsize='medium')   # relative to plt.rcParams['font.size']

# setting label sizes after creation
ax.xaxis.label.set_size(20)
plt.draw()

Neviem o podobnom spôsobe nastavenia veľkosti nadpisu po jeho vytvorení.

Komentáre (4)