Построение объекта класса множественных осей matplotlib

Моя проблема заключается в следующем: я пытаюсь наглядно представить 6 различных дизайнерских матриц. Функция, создающая отображение для этой матрицы дизайна, является частью модуля nipy и описывается так:

Класс nipy.modalities.fmri.design_matrix.DesignMatrix

Функция show(): визуализация проектной матрицы

Параметры:

 rescale: bool, optional, 
      rescale columns magnitude for visualization or not.
 ax: axis handle, optional
      Handle to axis onto which we will draw design matrix.
 cmap: colormap, optional
      Matplotlib colormap to use, passed to imshow.

Возвращает:

 ax: axis handle

По сути, я пытаюсь сделать подзаговор с 3 рядами и 2 столбцами с 6 различными матрицами.

n_scans = 84
tr = 7
hrf_models = ['canonical', 'canonical with derivative', 'fir', 'spm', 'spm_time', 'spm_time_dispersion']
drift_model = 'cosine'
frametimes = np.arange(0, n_scans * tr,tr)
hfcut = 128

fig1 = plt.figure()

ax1 = fig1.add_subplot(3, 2, 1)
hrf_model = hrf_models[0]
design_matrix = make_dmtx(frametimes, paradigm, hrf_model=hrf_model, drift_model=drift_model, hfcut=hfcut)
ax1 = design_matrix.show()
ax1.set_position([.05, .25, .9, .65])
ax1.set_title('Design matrix with {} as hrf_model'.format(hrf_model))

ax2 = fig1.add_subplot(3, 2, 2)
hrf_model = hrf_models[1]
design_matrix = make_dmtx(frametimes, paradigm, hrf_model=hrf_model, drift_model=drift_model, hfcut=hfcut)
ax2 = design_matrix.show()
ax2.set_position([.05, .25, .9, .65])
ax2.set_title('Design matrix with {} as hrf_model'.format(hrf_model))

......

ax6 = fig1.add_subplot(3, 2, 6)
hrf_model = hrf_models[5]
design_matrix = make_dmtx(frametimes, paradigm, hrf_model=hrf_model, drift_model=drift_model, hfcut=hfcut)
ax6 = design_matrix.show()
ax6.set_position([.05, .25, .9, .65])
ax6.set_title('Design matrix with {} as hrf_model'.format(hrf_model))

plt.show()

В настоящее время вывод представляет собой рисунок из 3 строк и 2 столбцов с пустым графиком, а затем каждая матрица дизайна отображается отдельно ниже.

Более того, цикл над списком hrf_models был бы гораздо лучше, чем повторять 6 раз один и тот же блок. Я сделал это в какой-то момент, но результат был точно такой же, к сожалению.

Текущий выход (необходимо прокрутить, чтобы увидеть всю матрицу дизайна):

Токовый выход

Спасибо за помощь!

1 ответ

Решение

По сути, выдержка из строки документации, которую вы указали в вопросе, уже подсказывает вам решение. Вам нужно использовать ax аргумент DesignMatrix.show()

ax1 = fig1.add_subplot(3, 2, 1)
design_matrix = make_dmtx(...)
design_matrix.show(ax = ax1)

Чтобы использовать петлю, вы можете сначала создать все оси, а затем зациклить их.

fig, axes = plt.subplots(nrows=3,ncols=2)
for i, ax in enumerate(axes.flatten()):
    hrf_model = hrf_models[0]
    design_matrix = make_dmtx(frametimes, paradigm, hrf_model=hrf_models[i], 
                              drift_model=drift_model, hfcut=hfcut)
    design_matrix.show(ax = ax)

Обратите внимание, что я ничего не тестировал здесь, потому что у меня нет доступных ниппелей.

Другие вопросы по тегам