Jak ustawić rozmiar czcionki tytułu figury i etykiet osi w Matplotlib?

Tworzę figurę w Matplotlib w ten sposób:

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')

Chcę określić rozmiary czcionek dla tytułu figury i etykiet osi. Potrzebuję, aby wszystkie trzy były różnych rozmiarów czcionek, więc ustawienie globalnego rozmiaru czcionki (mpl.rcParams['font.size']=x) nie jest tym, czego chcę. Jak mogę ustawić rozmiar czcionki dla tytułu figury i etykiet osi indywidualnie?

Rozwiązanie

Funkcje zajmujące się tekstem jak label, title, itp. przyjmują parametry takie same jak matplotlib.text.Text. Dla rozmiaru czcionki możesz użyć 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')

Aby globalnie ustawić rozmiary title i label, mpl.rcParams zawiera axes.titlesize i axes.labelsize. (Ze strony):

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

(Z tego co widzę, nie ma sposobu na oddzielne ustawienie rozmiarów etykiet x i y).

I widzę, że axes.titlesize nie ma wpływu na suptitle. Domyślam się, że musisz to ustawić ręcznie.

Komentarze (9)

Możesz to również zrobić globalnie poprzez słownik 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)
Komentarze (5)

Jeśli jesteś bardziej przyzwyczajony do używania obiektów ax do robienia swoich wykresów, możesz znaleźć ax.xaxis.label.set_size() łatwiejsze do zapamiętania, lub przynajmniej łatwiejsze do znalezienia przy użyciu tab w terminalu ipython. Wygląda na to, że wymaga operacji przerysowania po, aby zobaczyć efekt. Na przykład:

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()

Nie znam podobnego sposobu na ustawienie rozmiaru suptitle po jego utworzeniu'.

Komentarze (4)