|
import matplotlib.pyplot as plt |
|
import pandas as pd |
|
import os |
|
import logging |
|
import time |
|
|
|
class ChartGenerator: |
|
def __init__(self, data=None): |
|
logging.info("Initializing ChartGenerator") |
|
if data is not None: |
|
self.data = data |
|
else: |
|
self.data = pd.read_excel(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'data', 'sample_data.xlsx')) |
|
|
|
def generate_chart(self, plot_args): |
|
start_time = time.time() |
|
logging.info(f"Generating chart with arguments: {plot_args}") |
|
|
|
fig, ax = plt.subplots() |
|
for y in plot_args['y']: |
|
color = plot_args.get('color', None) |
|
if plot_args.get('chart_type', 'line') == 'bar': |
|
ax.bar(self.data[plot_args['x']], self.data[y], label=y, color=color) |
|
else: |
|
ax.plot(self.data[plot_args['x']], self.data[y], label=y, color=color) |
|
|
|
ax.set_xlabel(plot_args['x']) |
|
ax.legend() |
|
|
|
|
|
chart_filename = 'chart.png' |
|
output_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'static', 'images') |
|
if not os.path.exists(output_dir): |
|
os.makedirs(output_dir) |
|
|
|
full_path = os.path.join(output_dir, chart_filename) |
|
|
|
if os.path.exists(full_path): |
|
os.remove(full_path) |
|
|
|
plt.savefig(full_path) |
|
|
|
logging.info(f"Chart generated and saved to {full_path}") |
|
|
|
return os.path.join('static', 'images', chart_filename) |