Como fazer dois gráficos lado a lado usando Python?

94

Encontrei o seguinte exemplo no matplotlib:

import numpy as np
import matplotlib.pyplot as plt


x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'ko-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')


plt.subplot(2, 1, 2)
plt.plot(x2, y2, 'r.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')

plt.show()

Minha pergunta é: O que eu preciso mudar, para ter as parcelas lado a lado?

Heißenberg93
fonte

Respostas:

148

Altere suas configurações de subtrama para:

plt.subplot(1, 2, 1)

...

plt.subplot(1, 2, 2)

Os parâmetros para subplotsão: número de linhas, número de colunas e em qual subplot você está atualmente. Então 1, 2, 1significa "uma figura de 1 linha e 2 colunas: vá para a primeira subtrama." Então 1, 2, 2significa "uma figura de 1 linha e 2 colunas: vá para a segunda subtrama."

No momento, você está solicitando um layout de 2 linhas e 1 coluna (ou seja, uma sobre a outra). Você precisa solicitar um layout de 1 linha e 2 colunas. Quando você fizer isso, o resultado será:

lado a lado trama

Para minimizar a sobreposição de subtramas, você pode querer começar a:

plt.tight_layout()

antes do show. Produzindo:

enredo mais puro lado a lado

Jonathan Eunice
fonte
45

Confira esta página: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplotsÉ similar. Acho que é melhor porque é mais fácil definir os parâmetros da figura. Os primeiros dois argumentos definem o layout (no seu caso, 1 linha, 2 colunas) e outros parâmetros alteram recursos como o tamanho da figura:

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(5, 3))
axes[0].plot(x1, y1)
axes[1].plot(x2, y2)
fig.tight_layout()

insira a descrição da imagem aqui

intrometido
fonte
1
Existe também uma maneira de tornar o enredo mais amplo e alto?
Heißenberg93,
Não me refiro ao commend plt.xlim / ylim
Heißenberg93
5
Eu sugeriria usar plt.subplots. Você pode especificar o argumento figsizepara definir o tamanho da figura. Como em plt.subplots(1, 2, figsize=(20, 4)). Caso contrário, você pode primeiro definir o tamanho figura e figura: plt.figure(figsize=(20, 4)).
ocupado de
Por algum motivo, recebo dados em branco quando tento salvar "plt.savefig ('.... png')" na subtrama. Im umsing exatamente o mesmo código no início (eu apenas adicionei plt.figure (figsize = (7, 3))).
Heißenberg93 de
Você está ligando plt.savefigdepois plt.show? Em caso afirmativo, esse é provavelmente o seu problema.
ocupado