Curso de Python / Visualizar resultados com Matplotlib e salvar um gráfico
Matplotlib cria gráficos a partir de dados, eixos e rótulos explícitos. Para comparar totais de despesas, um gráfico de barras com unidade indicada e eixo iniciado em zero permite conferir diretamente os valores; nesta prática, o resultado é salvo em arquivo, sem abrir uma janela.
Escolher a comparação antes de desenhar
Para comparar categorias, coloque as categorias no eixo horizontal e as quantias no vertical. Para estudar mudanças ao longo do tempo, você precisaria de datas ordenadas e de um desenho adequado a essa pergunta. Um gráfico não corrige uma agregação errada: confira valores, unidades e dados ausentes antes de desenhar.
O exemplo usa alimentação de 11500 e transporte de 2500, em KRW, a unidade monetária mantida da amostra original. Não há conversão de moedas. A aula de pandas e validação de tabelas mostra como preparar totais conferíveis.
Selecione o ambiente virtual do projeto e instale o pacote externo:
python -m pip install matplotlib
Use uma versão compatível com seu Python e sistema. A instalação precisa ocorrer no ambiente usado pelo terminal que executará o script. Consulte a documentação de Axes.bar para os parâmetros do gráfico de barras.
Criar e salvar um gráfico completo
Use uma pasta de saída nova, pois salvar substitui um arquivo existente com o mesmo nome. Salve o programa completo abaixo como chart.py, em UTF-8, e execute python chart.py no ambiente selecionado. Fora de um ambiente virtual no macOS ou Ubuntu, use python3 se esse for o nome do interpretador. Esta primeira versão conserva os textos ingleses; a adaptação em português aparece adiante.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
plt.rcParams.update({"font.size": 18, "axes.titlesize": 22, "axes.labelsize": 20, "xtick.labelsize": 18, "ytick.labelsize": 18})
categories = ["food", "transport"]
amounts = [11500, 2500]
fig, ax = plt.subplots(figsize=(7, 4), layout="constrained")
bars = ax.bar(categories, amounts, color=["#2b6cb0", "#d69e2e"])
ax.set_ylabel("Amount (KRW)")
ax.set_title("Expenses by category")
ax.set_ylim(0, max(amounts) * 1.2)
ax.bar_label(bars, fmt="%.0f", padding=3)
fig.savefig("expense-chart.png", dpi=160)
plt.close(fig)
print("saved expense-chart.png")
Resultado esperado no terminal:
saved expense-chart.png
A mensagem confirma que o arquivo expense-chart.png foi salvo no diretório atual. Uma figura de 7 × 4 polegadas, gravada a 160 pontos por polegada, produz 1120 × 640 pixels. Abra o arquivo para conferir o conteúdo, além de verificar a existência.
ax.bar desenha as duas alturas; bar_label escreve seus números, e set_ylim deixa o eixo começar em zero e reserva espaço acima da maior barra. O formato %.0f mostra os valores sem casas decimais, coerente com os inteiros desta amostra. A documentação de Figure.savefig explica dimensões, resolução e gravação.
Distinguir Figure, Axes e o backend
Figure é a imagem inteira; Axes é a região que contém coordenadas e dados. As referências explícitas fig e ax deixam claro qual imagem e qual região cada operação modifica, especialmente quando existem vários gráficos.
Agg é um backend para produzir arquivos sem interface gráfica, adequado a este exemplo e a relatórios automáticos. A seleção ocorre antes da importação de pyplot. Para tentar uma janela em um ambiente de desktop, remova a seleção de Agg e chame plt.show() depois de salvar, antes de fechar a figura; isso requer um backend gráfico disponível.
plt.close(fig) libera a figura do gerenciamento de janelas do pyplot após a gravação. Mantenha esse cuidado em repetições de geração de relatórios. A ausência de uma janela é esperada com Agg e não significa que o PNG deixou de ser criado.
Adaptar os textos e verificar a fonte
Para a variante em português, substitua a lista de categorias por ["Alimentação", "Transporte"], o título por "Despesas por categoria" e o rótulo vertical por "Valor (KRW)". Preserve as quantias, as dimensões e os limites do eixo: traduzir os textos não deve mudar as alturas das barras.
A fonte precisa conter os caracteres usados, inclusive ç e ã. Na imagem em português abaixo, Noto Sans foi aplicada, e o arquivo de fonte efetivamente selecionado pelo Matplotlib foi verificado. Uma fonte que atende ao português não necessariamente contém todos os caracteres de coreano ou japonês.
O bloco a seguir demonstra o carregamento de um arquivo de fonte. O caminho Windows do exemplo corresponde a Malgun Gothic. Para a variante em português com Noto Sans, altere font_path para o caminho real do seu arquivo Noto Sans. Insira o bloco depois de importar pyplot como plt e antes de criar fig.
from matplotlib import font_manager
font_path = "C:/Windows/Fonts/malgun.ttf"
font_manager.fontManager.addfont(font_path)
plt.rcParams["font.family"] = font_manager.FontProperties(fname=font_path).get_name()
plt.rcParams["axes.unicode_minus"] = False
Confirme que o arquivo existe e que você pode usar a fonte. Se houver várias fontes instaladas com o mesmo nome de família, confira o arquivo resolvido; um nome configurado não comprova sozinho qual arquivo foi escolhido. Veja FontProperties e gerenciamento de fontes.
Este é o resultado realmente gravado após as substituições em português e a aplicação de Noto Sans. As duas quantias continuam em KRW, no mesmo eixo iniciado em zero:
Conferir legibilidade e preservar a comparação
- Abra o PNG e confira duas barras, os valores 11500 e 2500, a unidade KRW e o início do eixo em zero. Verifique também os acentos dos rótulos.
- Em uma cópia descartável, troque somente
figsize=(7, 4)porfigsize=(4, 4). Examine se o título foi cortado ou se as categorias ficaram sobrepostas.layout="constrained"não garante que qualquer texto caiba em toda largura. - Restaure
figsize=(7, 4)e regenere a imagem. Confira que os textos voltaram a caber e que os valores e a linha de base continuam iguais. - Examine a imagem reduzida à largura de um telefone. Se a leitura ficar difícil, ajuste dimensões, tamanho da fonte ou texto; preserve a correspondência entre números e alturas.
savefig substitui o mesmo caminho. Use nomes com data ou identificador de execução quando precisar preservar versões. O PNG é o resultado da prática; a figura publicada nesta página foi convertida para WebP sem perdas após a verificação visual.
Não corte o eixo das barras para exagerar diferenças nem use áreas decorativas que contradigam os valores. Unidade explícita, rótulos legíveis e números visíveis tornam a comparação verificável, enquanto a validação anterior estabelece o significado dos dados mostrados.





