Matplotlib - plt.show () no objeto gráfico

Aug 28 2020

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

2 Keon Aug 28 2020 at 01:42

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