O problema é o uso de aspect='equal'
, que evita que as subtramas se estendam até uma proporção de aspecto arbitrária e preencham todo o espaço vazio.
Normalmente, isso funcionaria:
import matplotlib.pyplot as plt
ax = [plt.subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
plt.subplots_adjust(wspace=0, hspace=0)
O resultado é este:

No entanto, com aspect='equal'
, como no seguinte código:
import matplotlib.pyplot as plt
ax = [plt.subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
a.set_aspect('equal')
plt.subplots_adjust(wspace=0, hspace=0)
Isso é o que temos:

A diferença neste segundo caso é que você forçou os eixos xey a terem o mesmo número de unidades / pixel. Uma vez que os eixos vão de 0 a 1 por padrão (ou seja, antes de plotar qualquer coisa), o uso de aspect='equal'
força cada eixo a ser um quadrado. Como a figura não é um quadrado, o pyplot adiciona um espaçamento extra entre os eixos horizontalmente.
Para contornar esse problema, você pode definir sua figura para ter a proporção correta. Vamos usar a interface pyplot orientada a objetos aqui, que considero superior em geral:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8,8)) # Notice the equal aspect ratio
ax = [fig.add_subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
a.set_aspect('equal')
fig.subplots_adjust(wspace=0, hspace=0)
Aqui está o resultado:

None
não está fazendo o que você pensa, significa 'usar o padrão'.