Корректировка графиков с помощью Matplotlib - PullRequest
1 голос
/ 13 мая 2019

У меня возникли проблемы с настройкой размера шрифта числовых меток на оси Y моих графиков.Настройка размера шрифта, по-видимому, корректирует только текст в поле легенды.

Регулировка «осей» не работает, потому что я использовал axes.ravel(), чтобы помочь получить набор из четырех сюжетов размером 2x2.

"axes.set_xlabel (fontsize = 'large', fontweight = 'bold') AttributeError: у объекта 'numpy.ndarray' нет атрибута 'set_xlabel'"

#The part of the code that creates the subplots.

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(40,20), squeeze=False, sharey=True)
axes = axes.ravel()

font = FontProperties()

font = {'weight' : 'bold','size'   : 22}

plt.rc('font', **font)

#Then under here are the loops that create each subplot.

for each_subplot in range(0,4):

    axes.set_xlabel(fontsize='large', fontweight='bold')

#Selecting the input data goes here, but I left it out.

Ответы [ 3 ]

2 голосов
/ 13 мая 2019

axes сам по себе является массивом осей. Итак, вы хотите сделать:

for each_subplot in range(0,4):
    axes[each_subplot].set_xlabel(fontsize='large', fontweight='bold')

или проще:

for ax in axes:
    ax.set_xlabel(fontsize='large', fontweight='bold')
1 голос
/ 13 мая 2019

В таких ситуациях я лично рекомендовал бы использовать enumerate, который предоставляет вам доступ не только к отдельным объектам оси, но и к индексу, который может использоваться, например, для изменения меток.Чтобы сгладить axes, вы можете использовать axes.ravel() или axes.flatten().Кроме того, вы можете напрямую использовать axes.flatten() в enumerate, как показано ниже.

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8,5), squeeze=False, sharey=True)

for index, ax in enumerate(axes.ravel()):
    ax.set_xlabel('X-label %s' %index, fontsize='large', fontweight='bold')
plt.tight_layout()    

enter image description here

1 голос
/ 13 мая 2019

axes теперь является ndarray, поэтому вам нужно извлечь элемент из массива и вызвать для него метод set_xlabel(). Попробуйте это.

for each_subplot in range(0,4):
    axes[each_subplot].set_xlabel(fontsize='large', fontweight='bold')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...