Spaces:
Running
Running
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| from scipy import stats | |
| class plotting(): | |
| def quick_plot(self, scatter=None, line=None, columns=["X", "Y"], output=None, hline=None): | |
| """ | |
| Plot the data along with the best fit line and its associated confidence band using | |
| Matplotlib's object-oriented API to avoid race conditions. | |
| Parameters: | |
| scatter (list or array): Data to plot as scatter points | |
| line (list or array): Data to plot as lines | |
| columns (list): Axes labels (default is ["X","Y"]) | |
| output (str): If provided, save figure to this path. If "marimo", return the figure object | |
| hline (float): If provided, add a horizontal line at this y-value | |
| Returns: | |
| None or Figure: Displays a matplotlib plot or returns the figure object if output="marimo" | |
| Example: | |
| >>> quick_plot(scatter=x_data, line=y_data) | |
| """ | |
| # Input validation | |
| if scatter is None and line is None: | |
| raise ValueError("Either scatter or line should be provided") | |
| # Convert inputs to lists if they aren't already | |
| if not isinstance(scatter, list): | |
| scatter = [scatter] if scatter is not None else [] | |
| if not isinstance(line, list): | |
| line = [line] if line is not None else [] | |
| # Create figure and axes objects (OO approach) | |
| fig, ax = plt.subplots(figsize=(6, 6)) | |
| # Plot scatter data | |
| idx = 0 | |
| for ds in scatter: | |
| if ds is not None: | |
| ax.scatter(ds[:, 0], ds[:, 1], label=f"Data {idx}") | |
| idx += 1 | |
| # Plot line data | |
| for ds in line: | |
| if ds is not None: | |
| ax.plot(ds[:, 0], ds[:, 1], color='red', label=f"Data {idx}") | |
| idx += 1 | |
| # Set labels | |
| ax.set_xlabel(columns[0]) | |
| ax.set_ylabel(columns[1]) | |
| # Add horizontal line if specified | |
| if hline is not None: | |
| ax.axhline(hline, color='black', linestyle='--') | |
| # Add legend | |
| ax.legend() | |
| # Add watermark | |
| ax.text(0.5, 0.5, 'TEMPLATE', transform=ax.transAxes, | |
| fontsize=40, color='gray', alpha=0.5, | |
| ha='center', va='center', rotation=30) | |
| # Handle output | |
| if output is None: | |
| # Use this instead of plt.show() to avoid blocking behavior | |
| fig.canvas.draw_idle() | |
| plt.show(block=False) | |
| elif output == "marimo": | |
| return fig | |
| else: | |
| # Save the figure to the specified path | |
| fig.savefig(output) | |
| # Close the figure to free memory if not returning it | |
| if output != "marimo": | |
| plt.close(fig) | |