Salvando um gráfico matplotlib em png


Gerando um arquivo png com a biblioteca matplotlib

Já aprendemos como gerar um gráfico na tela utilizando as bibliotecas matplotlib e a pyplot. Hoje veremos como podemos gerar um arquivo png, sem apresentação na tela. Este conhecimento é útil quando queremos postergar a apresentação do gráfico na operação do nosso programa ou armazenar o resultado para uso futuro.

Todos estes experimentos foram realizados no Linux Mint 18.1, 64 bits, python 3.5, executando em ambiente virtual.

Para aqueles que ainda não estudaram o artigo anterior (altamente recomendável 🙂 ), um breve resumo:

O que são as bibliotecas Matplotlib e Pyplot/

  • Matplotlib é uma biblioteca Python dedicada ao traçado gráfico em 2D.
  • Matplotlib.pyplot é um módulo da matplotlib;
  • Pyplot encapsula muitas das chamadas para a matplotlib, com uma forma de operação muito parecida ao MATLAB. As funções pyplot modificam áreas da figura de uma forma intuitiva, sendo a forma preferencial de uso com o Python.

Instalação da biblioteca matplotlib

Como já está nos repositórios do Mint, é muito simples:

sudo apt-get install python-tk

sudo apt-get install python-matplotlib

Traçando um gráfico na tela

Vamos inicialmente traçar um gráfico como aprendido no artigo anterior:

Todos os scripts e a figura png gerada estão disponíveis na página https://cadernodelaboratorio.com.br/scripts-softwares-e-arquivos-de-configuracao/ , sob o nome pack170913.tar.gz.

.plotpng_a.py: Curva de descarga de um capacitor
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  plotpng_a.py
#  
#  
# 
import numpy as np 
import matplotlib.pyplot as plt

tempoFinal = 0.005    #vamos analisar até 1 milisegundo
resistor= 10**6       #1oK ohms
capacitor= 10**-9    #10nF
numeroPontos = 1000   #numero de pontos a serem calculados
tensaoInicial = 10    #10 volts de tensao inicial


def main(args):
	
	pontosX = np.linspace(0,tempoFinal,numeroPontos,endpoint=True)
	expoente= - pontosX/(resistor * capacitor)
	tensao=  tensaoInicial * np.exp(expoente)
	
	plt.xlabel('tempo (segundos)')
	plt.ylabel('tensão (volts)')
	
	
	plt.title('Curva de descarga de um capacitor')
	plt.text(0.002, 5, 'C= 10nF, R=10M')
	
	plt.grid(True)

	plt.plot(pontosX,tensao)

	plt.show()
	
	
	return 0

if __name__ == '__main__':
	import sys
	sys.exit(main(sys.argv))

O gráfico resultante fica assim:

Curva de descarga de um capacitor

Gerando um arquivo png

No lugar do método show (plt.show()) no exemplo anterior, insira o comando plt.savefig(‘meuGrafico.png’). O restante do programa fica o mesmo. Observe que agora o gráfico não será mostrado, mas abra o diretório onde está o script  e o arquivo meuGrafico.png estará lá.

.plotpng_b.py: Curva de descarga de um capacitor
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  plotpng_a.py
#  
#  
# 
import numpy as np 
import matplotlib.pyplot as plt

tempoFinal = 0.005    #vamos analisar até 1 milisegundo
resistor= 10**6       #1oK ohms
capacitor= 10**-9    #10nF
numeroPontos = 1000   #numero de pontos a serem calculados
tensaoInicial = 10    #10 volts de tensao inicial


def main(args):
	
	pontosX = np.linspace(0,tempoFinal,numeroPontos,endpoint=True)
	expoente= - pontosX/(resistor * capacitor)
	tensao=  tensaoInicial * np.exp(expoente)
	
	plt.xlabel('tempo (segundos)')
	plt.ylabel('tensão (volts)')
	
	
	plt.title('Curva de descarga de um capacitor')
	plt.text(0.002, 5, 'C= 10nF, R=10M')
	
	plt.grid(True)

	plt.plot(pontosX,tensao)

	plt.savefig('meuGrafico.png') #esta linha cria um arquivo png com o gráfico 
	
	
	return 0

if __name__ == '__main__':
	import sys
	sys.exit(main(sys.argv))

A figura obtida no arquivo meuGrafico.png é idêntica a que visualizamos na tela com o primeiro script.

Configurando em mais detalhes o savefig

O modo mais simples de uso do savefig é fornecendo apenas o parâmetro “nomeDoArquivo”. Mas o método é bem mais poderoso, permitindo configurar muitos detalhes:

 savefig(fname, dpi=None, facecolor='w', edgecolor='w',
        orientation='portrait', papertype=None, format=None,
        transparent=False, bboxinches=None, padinches=0.1,
        frameon=None)

.Parâmetros do savefig

parâmetro significado opções
fname nome do arquivo
dpi resolução em pontos por polegada se None obtem o valor do arquivo matplotlibrc, scalar indicando pontos por polegada (dpi) figure, copia o dpi de ‘figure’
facecolor cor frontal b:azul,g:verde,r:vermelho,c:ciano,m:magenta,y:amarelo,k:preto,w:branco
edgecolor cor da lateral b:azul,g:verde,r:vermelho,c:ciano,m:magenta,y:amarelo,k:preto,w:branco
orientation orientação portrait:retrato,landscape:paisagem
papertype tamanho do papel letter,legal,executive,ledger,a0 até a10, b0 até b10.
format formato do arquivo png, pdf, ps, eps e svg.
transparent transparência True= transparente
bbox_inches tamanho em polegadas
pad_inches espaçamento em polegadas
frameon Se True a figura será colorida, se False,o fundo da figura será transparente

Até nosso próximo encontro!



                                      

Deixe um comentário