Существует ли код matplotlib.pyplot, который может разрешать три подзаголовка без кода axes.grid?

#python #matplotlib #subplot

#python #matplotlib #подзаголовок

Вопрос:

Я пытаюсь получить набор подзаголовков, который выглядит как результат для этого кода:

 import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as gridspec

fig = plt.figure(tight_layout=True)
gs = gridspec.GridSpec(2, 2)

ax = fig.add_subplot(gs[0, :])
ax.plot(np.arange(0, 1e6, 1000))
ax.set_ylabel('YLabel0')
ax.set_xlabel('XLabel0')

for i in range(2):
    ax = fig.add_subplot(gs[1, i])
    ax.plot(np.arange(1., 0., -0.1) * 2000., np.arange(1., 0., -0.1))
    ax.set_ylabel('YLabel1 %d' % i)
    ax.set_xlabel('XLabel1 %d' % i)
    if i == 0:
        for tick in ax.get_xticklabels():
            tick.set_rotation(55)
fig.align_labels()  # same as fig.align_xlabels(); fig.align_ylabels()

plt.show()
 

Мне было интересно, есть ли альтернатива этому коду без необходимости использовать matplotlib.gridspec и вместо этого полностью использовать matplotlib.pyplot , чтобы я мог получить этот результат.

Сначала я перепробовал множество вариантов приведенного ниже кода:

 plt.subplot(111)
plt.plot(I_123, nu_123, 'o', markersize=5)
plt.plot(I_123, F_123)
plt.grid(True)
plt.xlabel('Current/A', size='15')
plt.ylabel('Frequency/Hz', size='15')
plt.title('Plot for all plot points', size='25')

plt.subplot(221)
plt.plot(B_glycerine, nu_glycerine, 'o', markersize=5, color='indigo')
plt.plot(B_glycerine, Fglyc, color='red')
plt.grid('True')
plt.tick_params(labelsize='20')
plt.xlabel('Magnetic Field Strength/T', size='24')
plt.ylabel(r'Frequency/$times$10MHz', size='24')
plt.title('NMR plot for glycerine', size='25')

plt.subplot(222)
plt.plot(B_ptfe, nu_ptfe, 'o', markersize=5, color='indigo')
plt.plot(B_ptfe, Fptfe, color='red')
plt.grid('True')
plt.tick_params(labelsize='20')
plt.xlabel('Magnetic Field Strength/T', size='24')
plt.ylabel(r'Frequency/$times$10MHz', size='24')
plt.title('NMR plot for PTFE', size='25')
 

но я продолжаю видеть только два подзаголовка с одним подзаголовком, всегда полностью исключенным, и не нахожу никакого способа исправить это. Я не хочу использовать первый фрагмент кода, потому что это может привести к тому, что мне придется изменить остальную часть моего кода, чтобы он имел смысл для меня, поэтому, если есть какой-либо другой способ использования matplotlib.pyplot вместо этого, это будет оценено.

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

1. В чем проблема GridSpec ? Трудно понять, в чем именно ваша проблема

2. В этом нет ничего плохого gridspec , я, по сути, просто спрашиваю, есть ли альтернатива, которая использует pyplot , чтобы я мог сделать код согласованным, чтобы я мог лично прочитать и понять его лучше.

Ответ №1:

Или вы можете указать диапазон с помощью среза:

 ax1 = plt.subplot(2, 2, (1, 2))
ax2 = plt.subplot(2, 2, 3)
ax3 = plt.subplot(2, 2, 4)
 

Преимущество этого заключается в использовании одной и той же спецификации сетки и, следовательно constrained_layout , будет продолжать работать.

Ответ №2:

Если вам нужно такое же расположение осей, вы можете сделать либо:

 plt.subplot(211)
(...)
plt.subplot(223)
(...)
plt.subplot(224)
(...)
 

или

 gs = gridspec.GridSpec(2, 2)

ax1 = plt.subplot(gs[0,:])
(...)
ax2 = plt.subplot(gs[1,0])
(...)
ax3 = plt.subplot(gs[1,1])
(...)
 

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

1. Большое вам спасибо!