geometry - ¿Cómo puedo seleccionar mediante programación una subparcela específica en Matplotlib?
axes subplot (1)
Entonces, en una figure
en la que se han agregado tres subparcelas verticales con add_subplot
, ¿cómo puedo seleccionar, digamos, la central?
Ahora mismo hago esta lista de comprensión:
[r[0] for r in sorted([[ax, ax.get_geometry()[2]] for ax in self.figure.get_axes()], key=itemgetter(1))]
Donde simplemente puedo seleccionar el índice que quiero, con los axes
correspondientes. ¿Hay una manera más directa de hacer esto?
De la documentación de matplotlib :
Si la figura ya tiene una trama secundaria con clave (args, kwargs), simplemente hará que esa trama secundaria sea actual y la devolverá.
Aquí hay un ejemplo:
import matplotlib.pyplot as plt
fig = plt.figure()
for vplot in [1,2,3]:
ax = fig.add_subplot(3,1,vplot)
ax.plot(range(10),range(10))
ax_again = fig.add_subplot(3,1,2)
ax_again.annotate("The middle one",xy=(7,5),xytext=(7,5))
plt.show()
La trama del medio se llama de nuevo para que pueda ser anotada.
¿Qué sucede si configuro el fondo con mi llamada original? ¿Debo configurarlo de nuevo cuando obtenga el argumento secundario la segunda vez?
Sí. Los argumentos y las palabras clave de la llamada original se utilizan para hacer un identificador único. Entonces, para que la figura genere nuevamente este identificador único, debe pasar los mismos argumentos (definición de la cuadrícula, posición) y las palabras clave nuevamente. Por ejemplo:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(2,1,1,axisbg=''red'')
ax.plot(range(10),range(10))
ax = fig.add_subplot(2,1,2)
ax.plot(range(10),range(10))
ax_again = fig.add_subplot(2,1,1,axisbg=''red'')
ax_again.annotate("The top one",xy=(7,5),xytext=(7,5))
plt.show()
¿Qué pasa si uso ax_again.change_geometry()
?
Usted pensaría que change_geometry, por ejemplo, de un 312 a un 422, cambiaría la forma en que usa add_subplot, pero no lo hace. Parece que hay un error o un comportamiento indefinido cuando llamas a change_geometry. La clave única que se generó originalmente utilizando los argumentos y las palabras clave, hasta la primera llamada add_subplot, no se actualiza. Por lo tanto, si desea recuperar un eje con una llamada add_subplot, debe llamar a add_subplot con los argumentos y las palabras clave originales. Para obtener más información, siga este informe de problemas: https://github.com/matplotlib/matplotlib/issues/429
Mi conjetura por ahora es que si cambia alguna propiedad de la trama secundaria después de generarla con la llamada add_subplot, la única no se ajustará. Así que solo usa los argumentos y las palabras clave originales, y espero que esto funcione.