/ / Matplotlib: compartir ejes al tener 3 gráficos 2 a la izquierda y 1 a la derecha - python, matplotlib

Matplotlib: compartir ejes al tener 3 gráficos 2 a la izquierda y 1 a la derecha - python, matplotlib

Tengo el siguiente gráfico: enter image description here

Sin embargo, quiero que los gráficos 221 y 223 compartan el mismo eje x. Tengo el siguiente código:

self.fig_part_1 = plt.figure()
self.plots_part_1 = [
plt.subplot(221),
plt.subplot(223),
plt.subplot(122),
]

¿Cómo puedo lograr eso? Al final, no quiero que se muestren los números del eje x en el gráfico 221.

Respuestas

1 para la respuesta № 1

(Esto es principalmente un comentario para @H. Rev. pero lo publico como una "respuesta" para obtener un mejor formato de código)

Creo que es mucho mejor simplemente agregar las subparcelasmanualmente, ya que a medida que lo implementas ahora te dará dos ejes que solo tirarás. Incluso pueden dar problemas con las marcas de eje superpuestas y mucha confusión en general. Creo que es mejor crear la figura primero y luego agregar los ejes uno por uno. De esta manera también se resuelve el problema al tener que "actualizar" la cifra actual con plt.figure(self.f.number) ya que tienes acceso directo a por ej. fig_N

import matplotlib.pyplot as plt

fig1 = plt.figure()
# fig2 = plt.figure()  # more figures are easily accessible
# fig3 = plt.figure()  # more figures are easily accessible

ax11 = fig1.add_subplot(221)  # add subplot into first position in a 2x2 grid (upper left)
ax12 = fig1.add_subplot(223, sharex=ax11)  # add to third position in 2x2 grid (lower left) and sharex with ax11
ax13 = fig1.add_subplot(122)  # add subplot to cover both upper and lower right, in a 2x2 grid. This is the same as the rightmost panel in a 1x2 grid.
# ax21 = fig2.add_subplot(211)  # add axes to the extra figures
# ax21 = fig2.add_subplot(212)  # add axes to the extra figures
# ax31 = fig3.add_subplot(111)  # add axes to the extra figures
plt.show()

1 para la respuesta № 2

Solo usa plt.subplots (diferente de plt.subplot) para definir todos tus ejes, con la opción sharex=True:

f, axes = plt.subplots(2,2, sharex=True)
plt.subplot(122)
plt.show()

Tenga en cuenta que la segunda llamada con una matriz de subplot más grande se superpone a la anterior.

Ejemplo (No se pudo mostrar la imagen debido a su reputación ...)