Matplotlib - plt.show () no objeto gráfico
Eu tenho um exemplo muito simples aqui. Estou fazendo um gráfico de um objeto de machado retornado de uma função:
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?
Minha pergunta é sobre plt.show () no final. Obviamente, isso mostra a saída do gráfico. Mas por que? Para mim, não parece que plt.show () esteja vinculado a nada. Eu tenho meu chartobjeto, que contém meu gráfico com todos os seus parâmetros e outros enfeites. Mas como plt.show () sabe como interagir com isso? Pareceria mais intuitivo ter algo como chart.show(), como charté a instância da classe.
Respostas
Boa pergunta! charté um Axes criado quando você chama plt.subplots(). Pyplot é o que chamamos de API "com estado". Quando você faz chamadas para funções plt. *, Ele altera o estado interno do pyplot e isso pode afetar chamadas futuras. Quando você chama plt.subplots(), ele sabe que há uma Figura recém-criada com eixos de subtrama recém-criados dentro dela.
Da mesma forma, se você chamar plt.plot(), ele tem um registro armazenado de quais são os eixos mais recentes e plota os dados nesse gráfico.
Dê uma olhada no código fonte do pyplot e você pode ver como ele tem uma managervariável global que ele usa para armazenar o gráfico atual e atualiza isso managerquando você cria um gráfico.
Além disso, existe Figure.show(). Se você quiser contornar o pyplot, é algo assim