Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Gerar imagem ou arquivo pdf com Dataframes e gráficos

Bom dia. Como faço para pegar dataframes ou gráficos gerados pelo pandas e gerar um arquivo de imagem com eles ?

5 respostas
solução!

Olá Mario! Tudo certinho?

Para salvar gráficos no formato de imagem você pode utilizar o método savefig do matplotlib. Vou mostrar dois exemplos aqui de como utilizá-lo para que você possa entender melhor seu funcionamento:

Imagem de dois gráficos gerados e salvos. A primeira figura é um gráfico de linha, e ela está sendo salva por meio do comando plt.savefig(). Já a segunda figura é um histograma com barras da cor azul que foi gerado por meio da função histplot do seaborn. Para salvar essa figura, primeiro utilizou o método get_figure, conforme será melhor explicado abaixo

Nos exemplos acima estou utilizando um dataset aleatório apenas para gerar os gráficos e mostrar a forma como você pode salvar sua figura.

Observe que no primeiro exemplo, para salvar a figura, foi utilizado apenas o comando plt.savefig('nome_da_figura.png') e que, no segundo exemplo, por se tratar de um gráfico gerado pela biblioteca seaborn, antes de salvar a figura, foi necessário utilizar o método get_figure, na linha fig = ax.get_figure(), para pegar a figura, e depois salvá-la fig.savefig('nome_da_figura.png').

Caso você esteja utilizando o Google Colab, ao salvar suas figuras, automaticamente elas já irão aparecer na barra lateral esquerda na parte de "Arquivos" com os respectivos nomes que foram dados à elas. Para fazer o download dessas imagens, basta clicar com o botão direito do mouse em cima do nome da figura e clicar em "Fazer download":

Imagem do Google Colab onde existe uma seta vermelha apontando para um arquivo do tipo png na barra de arquivos, e outra seta vermelha apontando para a opção "Fazer download"

Caso você esteja usando o Jupyter Notebook ou semelhantes, a figura será salva na mesma pasta onde se encontra salvo o seu notebook.

Em relação a salvar um dataframe como uma imagem, existe uma biblioteca que nos permite fazer isso. O nome dela é dataframe_image. Para utilizá-la, primeiro você deve fazer sua instalação, você pode fazer isso digitando o comando pip install dataframe_image em uma célula e executando-a.

Após instalada, você deve fazer a importação dessa biblioteca por meio do comando import dataframe_image as dfi. E depois, para salvar o dataframe, será utilizado o método dfi.export(dataframe, 'nome_do_dataframe.png'). Para o qual você deve passar como argumento o dataframe, e o nome que deseja dar a imagem que será salva. Abaixo, vou deixar um exemplo de sua utilização:

import dataframe_image as dfi
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(6, 6), columns=list('ABCDEF'))
dfi.export(df, 'dataframe.png')

O dataframe df foi criado apenas para exemplificar o uso do método export :)

Caso queira explorar um pouco mais sobre o savefig e a biblioteca datetime_image, vou deixar os links de suas documentações aqui:

Espero que isso te ajude!

Qualquer dúvida me avisa, tá bom? Estarei por aqui.

Bons estudos!

Muito obrigado! Eu consegui salvar a imagem porém os dados não vieram junto, eu li a documentação mas não vi nenhum parâmetro para isso. Como fazer ?

Olá Mario!

Desculpa, não entendi muito bem qual foi o problema. Vou te pedir que me passe mais algumas informações, por favor. ^^

1 - Em qual das imagens que você teve problema? A do gráfico ou a do dataframe?

2 - Quais dados não estão aparecendo?

Se puder, envia aqui no fórum a parte do seu código na qual você está salvando essa imagem e também um print dessa imagem, porque assim fica mais fácil de tentarmos identificar o problema :)

Observação: para enviar uma imagem no fórum, basta subir ela para algum site de compartilhamento de imagem (eu utilizo o imgur) e colar o link que será gerado pra ela, aqui.

Aguardo seu retorno.

Esse aqui é o código todo, esta tudo junto mas estava em células diferente no jupyter notebook.

import pandas as pd
import matplotlib.pyplot as plt

dataset = pd.read_csv('emissao_CO2.csv',index_col = 0)

dataset_br = dataset.loc['Brazil'].copy()

comparativo = dataset_br.Year >= 1990

dataset_br[comparativo]

grafico = dataset_br[comparativo].plot.line(x = 'Year', y = 'Annual CO2 emissions', title = "Emissão anual de CO2 no Brasil(1990 - 2019)", xlabel = "Ano", 

ylabel = 'Quantidade de CO2 em e^8 toneladas', legend = False, fontsize= 14, figsize =(10,8))

figure = grafico.get_figure()

figure.savefig('emissao_co2.png')

Essa é a planilha que eu vejo no programa https://imgur.com/1RhGMlo

Essa é a imagem que eu consigo quando uso o .getfigure ( ) e depois o .savefig() https://imgur.com/DVr07oe

Olá Mario!

Peço desculpas pela demora em dar o retorno.

Pelo que eu pude perceber a imagem está saindo com os valores dos eixos tudo em preto. Vamos testar algumas abordagens para tentar resolver esse problema.

1 - Reiniciar o ambiente de execução

Para fazer isso, caso esteja usando o Colab, basta seguir o seguinte caminho: Ambiente de execução > Reiniciar e executar tudo Reiniciando o ambiente de execução do google colab seguindo o caminho ensinado anteriormente

Caso esteja utilizando o Jupyter: Kernel > Restart and Run All

Reiniciando o ambiente de execução do jupyter notebook seguindo o caminho ensinado anteriormente

Caso o erro persista, vamos tentar outra opção.

2 - Mudar a cor do facecolor

Pode acontecer que a IDE que você esteja utilizando esteja com o facecolor padrão como preto, e isso pode estar fazendo com que a imagem de seu gráfico saia dessa cor. Sendo assim, você pode padronizar essa cor como branco da seguinte maneira:

figure = grafico.get_figure()
figure.set(facecolor = (1, 1, 1))
figure.savefig('emissao_co2.png')

Após salvar a imagem, confira se funcionou e os eixos aparecam dee forma correa.

Por fim, caso nenhuma das opções acima funcionem:

3 - Fazer o gráfico utilizando a biblioteca seaborn

Uma outra forma de fazer o gráfico de linhas é utilizando o lineplot do seaborn. Uma forma de utilizar esse método seria o seguinte:

grafico = sns.lineplot(data = dataset_br[comparativo], x = 'Year', y = 'Annual CO2 emissions') 
figure = grafico.get_figure()
figure.savefig('emissao_co2.png')

Vou deixar aqui o link da documentação do lineplot:

Espero que alguma dessas alternativas funcionem! Qualquer coisa você me avisa, tá bom?

Bons estudos!