Matplotlib - plt.show () en el objeto de gráfico
Aquí tengo un ejemplo realmente simple. Estoy haciendo una trama a partir de un objeto ax devuelto por una función:
import matplotlib.pyplot as plt
x = ['a', 'b', 'c']
y = [1, 2, 3]
def make_plot():
fig, ax = plt.subplots()
ax.set_title('test bar chart')
return ax
chart = make_plot()
chart.bar(x, y)
plt.show() #why does this show the chart?
Mi pregunta es sobre plt.show () al final. Obviamente, esto muestra la salida del gráfico. ¿Pero por qué? Para mí, no parece que plt.show () esté vinculado a nada. Tengo mi chartobjeto, que contiene mi gráfico con todos sus parámetros y demás. Pero, ¿cómo sabe plt.show () interactuar con esto? Parecería más intuitivo tener algo como chart.show(), como chartes la instancia de clase.
Respuestas
¡Buena pregunta! chartes un Axes creado cuando llamas plt.subplots(). Pyplot es lo que se llama una API "con estado". Cuando realiza llamadas a funciones plt. *, Cambia el estado interno de pyplot y eso puede afectar futuras llamadas. Cuando llama plt.subplots(), sabe que hay una Figura recién creada con ejes de subtrama recién creados dentro de ella.
De manera similar, si llama plt.plot(), tiene un registro almacenado de cuáles son los ejes más recientes y traza los datos en ese gráfico.
Eche un vistazo al código fuente de pyplot y podrá ver cómo tiene una managervariable global que utiliza para almacenar el gráfico actual y lo actualiza managercuando crea un gráfico.
Además, existe Figure.show(). Si desea trabajar con pyplot, se parece a esto