Как повторить настройку осей в цикле в matplotlib?

#python #matplotlib #plot #settings #axes

Вопрос:

Обычно я использую следующие команды для создания многопанельного графика:

 import matplotlib.pyplot as plt

fig, mainax = plt.subplots(nrows=2, ncols=2, figsize=(10, 10), dpi=100)
ax1, ax2, ax3, ax4 = mainax.flatten()
 

Затем я использую следующую команду для настройки параметров осей:

 ax1.tick_params('x', which='major', length=10, width=2, direction='in', labelsize=24, labelbottom=True)

ax1.tick_params('x', which='minor', length=7, width=2, direction='in')

for axis in ['top', 'bottom', 'left', 'right']:
    ax1.spines[axis].set_linewidth(2)

for tick in ax1.get_xticklabels():
    tick.set_fontname('serif')
 

Я должен повторить их для ax1 , ax2 , ax3 , и ax4 . Пока у меня есть несколько панелей, проблем нет, но когда у меня слишком много панелей (например, 5 строк и 4 столбца), код будет уродливым, если я их повторю.

Как я могу включить их в цикл? Или какой-либо альтернативный способ избежать повторения команд?

Ответ №1:

Вы можете избежать любого цикла с помощью matplotlib.rcParams .
Вы можете добавить эти строки в начале вашего скрипта python:

 rcParams['xtick.major.size'] = 10
rcParams['xtick.major.width'] = 2
rcParams['xtick.direction'] = 'in'
rcParams['xtick.labelsize'] = 24
rcParams['xtick.labelbottom'] = True

rcParams['xtick.minor.size'] = 7
rcParams['xtick.minor.width'] = 2

rcParams['font.family'] = 'serif'

rcParams['axes.linewidth'] = 2
 

Дополнительные параметры настройки см. в этой документации.
Пример рабочего кода:

 import matplotlib.pyplot as plt
from matplotlib import rcParams

rcParams['xtick.major.size'] = 10
rcParams['xtick.major.width'] = 2
rcParams['xtick.direction'] = 'in'
rcParams['xtick.labelsize'] = 24
rcParams['xtick.labelbottom'] = True

rcParams['xtick.minor.size'] = 7
rcParams['xtick.minor.width'] = 2

rcParams['font.family'] = 'serif'

rcParams['axes.linewidth'] = 2


fig, mainax = plt.subplots(nrows=2, ncols=2, figsize=(10, 10), dpi=100)

plt.show()
 
  • 2 строки и 2 столбца:

    введите описание изображения здесь

  • 5 строк и 4 столбца:

    введите описание изображения здесь

Комментарии:

1. И есть какие-нибудь идеи, что является ключом для поворота метки галочки? для галочки в ax1.get_xticklabels(): галочка.set_rotation(30)

2. Насколько я знаю, поворот метки галочки не считается параметром стиля , поэтому вы не найдете для этого ключа в документации . Я думаю, что для этого параметра вы должны выполнить итерацию по всем осям

Ответ №2:

попробуйте это:

 import matplotlib.pyplot as plt

nrows , ncols = 2 , 2

fig, axes = plt.subplots(nrows, ncols, figsize=(10, 10), dpi=100)

for row in range(nrows):
    for col in range(ncols):
        axes[row,col] = mainax.flatten()

        axes[row,col].tick_params('x', which='major', length=10, width=2, direction='in', labelsize=24, labelbottom=True)

        axes[row,col].tick_params('x', which='minor', length=7, width=2, direction='in')

        for axis in ['top', 'bottom', 'left', 'right']:
            axes[row,col].spines[axis].set_linewidth(2)

        for tick in axes[row,col].get_xticklabels():
            tick.set_fontname('serif')
 

Комментарии:

1. У меня есть ошибка для этой команды: axes[строка,col] = mainax.flatten (), говорящая: имя » оси » не определено

2. @Radvin, я немного ошибся в объявлении axes , и имя было maxes , проверьте код редактирования, в этом коде не должно быть ошибки