Commit
·
4e8dd01
1
Parent(s):
bf2b46a
v118
Browse files
app.py
CHANGED
|
@@ -226,24 +226,33 @@ def safe_get_column(df, column):
|
|
| 226 |
|
| 227 |
def plot_and_save(plt, filename=None, **savefig_kwargs):
|
| 228 |
import os
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 229 |
if filename is None:
|
| 230 |
filename = PLOT_FILENAME
|
| 231 |
|
| 232 |
# Convert to absolute path
|
| 233 |
-
filename = os.path.abspath(filename)
|
| 234 |
|
| 235 |
# Ensure the directory exists
|
| 236 |
os.makedirs(os.path.dirname(filename) or '.', exist_ok=True)
|
| 237 |
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
|
| 248 |
# Monkey patch DataFrame to add safe column access
|
| 249 |
import pandas as pd
|
|
|
|
| 226 |
|
| 227 |
def plot_and_save(plt, filename=None, **savefig_kwargs):
|
| 228 |
import os
|
| 229 |
+
import matplotlib
|
| 230 |
+
|
| 231 |
+
# Make sure we're using the non-interactive backend
|
| 232 |
+
matplotlib.use('Agg')
|
| 233 |
+
|
| 234 |
if filename is None:
|
| 235 |
filename = PLOT_FILENAME
|
| 236 |
|
| 237 |
# Convert to absolute path
|
| 238 |
+
filename = os.path.abspath(str(filename))
|
| 239 |
|
| 240 |
# Ensure the directory exists
|
| 241 |
os.makedirs(os.path.dirname(filename) or '.', exist_ok=True)
|
| 242 |
|
| 243 |
+
try:
|
| 244 |
+
# Set default savefig parameters if not provided
|
| 245 |
+
save_params = {'bbox_inches': 'tight', 'dpi': 100}
|
| 246 |
+
save_params.update(savefig_kwargs)
|
| 247 |
+
|
| 248 |
+
# Save the plot using the matplotlib savefig function directly
|
| 249 |
+
plt.savefig(filename, **save_params)
|
| 250 |
+
plt.close()
|
| 251 |
+
print(f"[DEBUG] Plot saved to: {filename}")
|
| 252 |
+
return filename
|
| 253 |
+
except Exception as e:
|
| 254 |
+
print(f"[ERROR] Failed to save plot: {str(e)}")
|
| 255 |
+
return None
|
| 256 |
|
| 257 |
# Monkey patch DataFrame to add safe column access
|
| 258 |
import pandas as pd
|