Сюжеты группировки Matplotlib, увеличивающие пространство между кластерами - PullRequest
0 голосов
/ 23 марта 2020

Я использую следующий код для построения графика, состоящего из 16 субплотов

# Generate figure
plt.figure(figsize=(12,12.25))

plt.subplot(4,4,1)
im = plt.imshow(qcf1r,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.title(r'Quantum', loc='center', fontsize=14)
plt.ylabel(r'$\xi_p$')
plt.text(-10, 9, 't=0.013' , fontsize = 10)
plt.text(-10,-9, r'$\Re\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7))
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,2)
im = plt.imshow(ccf1r,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.title(r'Classical', loc='center' , fontsize = 12)
plt.text(-10, 9, 't=%s'%format(0.013,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Re\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,3)
im = plt.imshow(qcf2r,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.title(r'Quantum', loc='center' , fontsize = 12)
plt.text(-10, 9, 't=%s'%format(0.071,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Im\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,4)
im = plt.imshow(ccf2r,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.title(r'Classical', loc='center' , fontsize = 12)
plt.text(-10, 9, 't=%s'%format(0.071,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Im\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,5)
im = plt.imshow(qcf1i,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.ylabel(r'$\xi_p$')
plt.text(-10, 9, 't=%s'%format(0.013,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Re\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7))
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,6)
im = plt.imshow(ccf1i,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.text(-10, 9, 't=%s'%format(0.013,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Re\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,7)
im = plt.imshow(qcf2i,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.text(-10, 9, 't=%s'%format(0.071,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Im\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,8)
im = plt.imshow(ccf2i,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.text(-10, 9, 't=%s'%format(0.071,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Im\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,9)
im = plt.imshow(qcf3r,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.ylabel(r'$\xi_p$')
plt.text(-10, 9, 't=%s'%format(0.157,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Re\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7))
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,10)
im = plt.imshow(ccf3r,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.text(-10, 9, 't=%s'%format(0.157,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Re\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,11)
im = plt.imshow(qcf4r,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.text(-10, 9, 't=%s'%format(0.393,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Im\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,12)
im = plt.imshow(ccf4r,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.text(-10, 9, 't=%s'%format(0.393,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Im\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7), fontsize=0)
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,13)
im = plt.imshow(qcf3i,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.xlabel(r'$\xi_q$')
plt.ylabel(r'$\xi_p$')
plt.text(-10, 9, 't=%s'%format(0.157,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Re\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7))
plt.yticks(np.linspace(-9,9,7))
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,14)
im = plt.imshow(ccf3i,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.xlabel(r'$\xi_q$')
plt.text(-10, 9, 't=%s'%format(0.157,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Re\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7))
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,15)
im = plt.imshow(qcf4i,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.xlabel(r'$\xi_q$')
plt.text(-10, 9, 't=%s'%format(0.393,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Im\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7))
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

plt.subplot(4,4,16)
im = plt.imshow(ccf4i,extent=([-x0,x0,-x0,x0]),cmap='seismic',aspect='equal',origin='lower')
plt.xlabel(r'$\xi_q$')
plt.text(-10, 9, 't=%s'%format(0.393,'.3f') , fontsize = 10)
plt.text(-10,-9, r'$\Im\left[ \chi(\xi_q,\xi_p) \right]$', fontsize=10)
plt.ylim(-x0,x0)
plt.xticks(np.linspace(-9,9,7))
plt.yticks(np.linspace(-9,9,7), fontsize=0)
plt.tick_params(width=1,length=5,direction='in',top= 'True', right = 'True')
plt.grid(color='gray', linestyle=':', linewidth=.2)
im.set_norm(cnorm)

cax1 = plt.axes([0.20,0.93,0.60,0.01]) #([0.94,0.66,0.03,0.19])
clb = plt.colorbar(cax=cax1, orientation= 'horizontal')
clb.ax.set_title(r'$\chi(\xi_q,\xi_p)$')

plt.subplots_adjust(wspace=0.00, hspace=-0.01)

plt.show()
plt.close()

, и я получаю это 16 subplots all sharing axes, что хорошо, но не идеально

я хотел бы сгруппировать их в 4 группы по 4 участка, разделенных небольшим расстоянием. как в этой рисованной версии enter image description here

Я пытался изменить subplots_adjust , но это меняет интервал между всеми фигурами. Пока что я не нашел ни одного полезного или связанного ответа.

1 Ответ

1 голос
/ 23 марта 2020

Для такого рода вещей, я думаю, вам придется творчески использовать GridSpec. См. дополнительные примеры здесь

import matplotlib.pyplot as plt
from matplotlib import gridspec


fig = plt.figure(figsize=(12,12.25))

gs0 = gridspec.GridSpec(2,2, hspace=0.1, wspace=0.1)
gsList = [gridspec.GridSpecFromSubplotSpec(2,2, subplot_spec=gs0[i,j], hspace=0, wspace=0) for i in range(2) for j in range(2)]

plt.subplot(gsList[0][0,0])
plt.subplot(gsList[0][0,1])
plt.subplot(gsList[0][1,0])
plt.subplot(gsList[0][1,1])

plt.subplot(gsList[1][0,0])
plt.subplot(gsList[1][0,1])
plt.subplot(gsList[1][1,0])
plt.subplot(gsList[1][1,1])

plt.subplot(gsList[2][0,0])
plt.subplot(gsList[2][0,1])
plt.subplot(gsList[2][1,0])
plt.subplot(gsList[2][1,1])

plt.subplot(gsList[3][0,0])
plt.subplot(gsList[3][0,1])
plt.subplot(gsList[3][1,0])
plt.subplot(gsList[3][1,1])

enter image description here

...