terceiroAgente / tools /statistical_graph_generator.py
Lar159's picture
Update tools/statistical_graph_generator.py
c5a1bb4 verified
Raw
History Blame Contribute Delete
4.73 kB
import numpy as np
import matplotlib.pyplot as plt
from smolagents.tools import tool
import time
from typing import Optional, List, Dict
@tool
def plot_line_chart(x_values: List, y_values: List[float], title: str = "Gráfico de Linhas", x_label: str = "Eixo X", y_label: str = "Eixo Y") -> str:
"""
Gera e salva um gráfico de linhas, ideal para mostrar tendências ao longo do tempo.
Args:
x_values: Uma lista de rótulos ou números para o eixo X (ex: meses, anos).
y_values: Uma lista de números (int ou float) para o eixo Y.
title: O título do gráfico.
x_label: O rótulo do eixo X.
y_label: O rótulo do eixo Y.
Returns:
O caminho do arquivo da imagem PNG gerada.
"""
try:
if len(x_values) != len(y_values):
return "Erro: As listas x_values e y_values devem ter o mesmo tamanho."
plt.figure(figsize=(10, 6))
plt.plot(x_values, y_values, marker='o', linestyle='-')
plt.title(title)
plt.xlabel(x_label)
plt.ylabel(y_label)
plt.grid(True, which='both', linestyle='--', linewidth=0.5)
plt.tight_layout()
file_path = f"line_chart_{int(time.time_ns())}.png"
plt.savefig(file_path)
plt.close()
return f"Gráfico de linhas gerado e salvo em: {file_path}"
except Exception as e:
return f"Erro ao gerar o gráfico de linhas: {str(e)}"
@tool
def plot_bar_chart(labels: List[str], values: List[float], title: str = "Gráfico de Barras", x_label: str = "Categorias", y_label: str = "Valores", y_lim: Optional[List[float]] = None) -> str:
"""
Gera e salva um gráfico de barras.
Args:
labels: Uma lista de strings para os rótulos de cada barra.
values: Uma lista de números (int ou float) correspondendo ao valor de cada barra.
title: O título do gráfico.
x_label: O rótulo do eixo X.
y_label: O rótulo do eixo Y.
y_lim: Opcional. Uma lista [min, max] para definir o limite do eixo Y, útil para criar distorções.
Returns:
O caminho do arquivo da imagem PNG gerada.
"""
try:
plt.figure(figsize=(10, 6))
plt.bar(labels, values)
plt.title(title)
plt.xlabel(x_label)
plt.ylabel(y_label)
plt.xticks(rotation=45, ha="right")
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
if y_lim:
plt.ylim(y_lim)
file_path = f"bar_chart_{int(time.time_ns())}.png"
plt.savefig(file_path)
plt.close()
return f"Gráfico de barras gerado e salvo em: {file_path}"
except Exception as e:
return f"Erro ao gerar o gráfico de barras: {str(e)}"
@tool
def plot_pie_chart(labels: List[str], sizes: List[float], title: str = "Gráfico de Setores") -> str:
"""
Gera e salva um gráfico de pizza (setores).
Args:
labels: Uma lista de strings para os rótulos de cada fatia.
sizes: Uma lista de números (int ou float) correspondendo ao tamanho de cada fatia.
title: O título do gráfico.
Returns:
O caminho do arquivo da imagem PNG gerada.
"""
try:
plt.figure(figsize=(8, 8))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, shadow=True)
plt.title(title)
plt.axis('equal') # Assegura que o gráfico seja um círculo.
file_path = f"pie_chart_{int(time.time_ns())}.png"
plt.savefig(file_path)
plt.close()
return f"Gráfico de setores gerado e salvo em: {file_path}"
except Exception as e:
return f"Erro ao gerar o gráfico de setores: {str(e)}"
@tool
def plot_histogram(data: List[float], bins: int = 10, title: str = "Histograma", x_label: str = "Valores", y_label: str = "Frequência") -> str:
"""
Gera e salva um histograma a partir de um conjunto de dados.
Args:
data: Uma lista de números (int ou float) para compor o histograma.
bins: O número de 'caixas' (colunas) no histograma.
title: O título do gráfico.
x_label: O rótulo do eixo X.
y_label: O rótulo do eixo Y.
Returns:
O caminho do arquivo da imagem PNG gerada.
"""
try:
plt.figure(figsize=(10, 6))
plt.hist(data, bins=bins, edgecolor='black')
plt.title(title)
plt.xlabel(x_label)
plt.ylabel(y_label)
plt.grid(axis='y', linestyle='--', alpha=0.7)
file_path = f"histogram_{int(time.time_ns())}.png"
plt.savefig(file_path)
plt.close()
return f"Histograma gerado e salvo em: {file_path}"
except Exception as e:
return f"Erro ao gerar o histograma: {str(e)}"