Как установить размер шрифта заголовка рисунка и оси в Matplotlib?

Я создаю фигуру в Matplotlib следующим образом:

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

Я хочу указать размеры шрифта для названия рисунка и меток осей. Мне нужно, чтобы все три были разными размерами шрифтов, поэтому установка глобального размера шрифта (mpl.rcParams['font.size']=x) - это не то, что я хочу. Как установить размер шрифта для названия фигуры и меток оси отдельно?

Ответ 1

Функции, относящиеся к тексту типа label, title и т.д., принимают такие же параметры, как matplotlib.text.Text. Для размера шрифта вы можете использовать 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')

Для глобальных размеров title и label mpl.rcParams содержит axes.titlesize и axes.labelsize. (Со страницы):

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

(Насколько я вижу, не существует способа установить размеры меток x и y отдельно.)

И я вижу, что axes.titlesize не влияет на suptitle. Я думаю, вам нужно установить это вручную.

Ответ 2

Вы также можете сделать это глобально через словарь 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)

Ответ 3

Если вы более привыкли использовать объекты ax для построения графиков, вам может показаться, что ax.xaxis.label.set_size() легче запомнить или, по крайней мере, легче найти с помощью tab в терминале ipython. Кажется, после операции нужно перерисовать эффект. Например:

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

Я не знаю подобного способа установки размера субтитра после его создания.

Ответ 4

Чтобы изменить только шрифт заголовка (а не шрифт оси), я использовал это:

import matplotlib.pyplot as plt
fig = plt.Figure()
ax = fig.add_subplot(111)
ax.set_title('My Title', fontdict={'fontsize': 8, 'fontweight': 'medium'})

Шрифтдикт, кроме всех kwargs из matplotlib.text.Text.

Ответ 5

Альтернативным решением для изменения размера шрифта является изменение отступов. Когда Python сохраняет ваш PNG, вы можете изменить макет, используя открывшееся диалоговое окно. Расстояние между осями, отступы, если хотите, могут быть изменены на этом этапе.

Ответ 6

Поместите right_ax перед set_ylabel()

ax.right_ax.set_ylabel('AB scale')