O código abaixo produz lacunas entre os subplots. Como faço para remover as lacunas entre os subplots e tornar a imagem uma grade compacta?
import matplotlib.pyplot as plt
for i in range(16):
i = i + 1
ax1 = plt.subplot(4, 4, i)
plt.axis('on')
ax1.set_xticklabels([])
ax1.set_yticklabels([])
ax1.set_aspect('equal')
plt.subplots_adjust(wspace=None, hspace=None)
plt.show()
python
matplotlib
user3006135
fonte
fonte
None
não está fazendo o que você pensa, significa 'usar o padrão'.plt.subplots_adjust(wspace=0, hspace=0)
resolveria seu problema, não fosse pelo fato de você usar'equal'
aspecto. Veja minha resposta para detalhes.Respostas:
Você pode usar gridspec para controlar o espaçamento entre os eixos. Há mais informações aqui.
fonte
GridSpec
, se você pegar a figura na criação, você também pode definir as distâncias com:fig.subplots_adjust(hspace=, wspace=)
for
loop?subplots
. Essa resposta realiza o trabalho sem sacrifíciossubplots
.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:
O resultado é este:
No entanto, com
aspect='equal'
, como no seguinte código: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:
Aqui está o resultado:
fonte
plt.subplots_adjust(wspace=0, hspace=0)
Sem recorrer a gridspec inteiramente, o seguinte também pode ser usado para remover as lacunas, definindo wspace e hspace como zero:
Resultando em:
fonte
Você já tentou
plt.tight_layout()
?com
plt.tight_layout()
sem ele:Ou: algo assim (use
add_axes
)Se você não precisa compartilhar eixos, simplesmente
axLS=map(fig.add_axes, rectLS)
fonte
Com versões recentes de matplotlib, você pode tentar o Layout restrito . No
plt.subplot()
entanto, isso não funciona , então você precisa usar em seuplt.subplots()
lugar:fonte