EaglePlot › Getting Started
Getting Started — EaglePlot
NCCU Department of Chemistry and Biochemistry
What Is This Tool?
EaglePlot is a Python toolkit plus Streamlit GUI that makes scientific data visualization straightforward for computational chemists and physical scientists. It wraps Matplotlib, Seaborn, and Plotly behind a clean API and an interactive point-and-click interface.
You can use it two ways:
| Mode | Best for |
|---|---|
| Streamlit GUI (point-and-click) | Exploring data quickly; no coding required |
| Python API (scripts / notebooks) | Reproducible analysis; programmatic control |
Installation
Step 1 — Clone the repository
git clone https://github.com/The-Schultz-Lab/eagleplot.git
cd eagleplot
Step 2 — Create a virtual environment
python -m venv .venv
Step 3 — Activate the environment
Windows
.venv\Scripts\activate.bat
macOS / Linux
source .venv/bin/activate
Step 4 — Install EaglePlot
pip install -e ".[formats,nist]"
The formats extra adds HDF5 and NetCDF support; nist adds the NIST WebBook
lookup. The editable install is also what puts the eagleplot command on your PATH.
Step 5 — Verify
python -c "import streamlit, numpy, pandas, matplotlib, seaborn, plotly; print('Ready!')"
Launching the GUI
Windows — double-click launch.bat or run from a terminal
launch.bat
Any platform
streamlit run eagleplot/Home.py
Open http://localhost:8501 in your browser. Use the sidebar to navigate between pages.
Your First Plot (GUI)
- Data Upload — upload a CSV or drag-and-drop a
.npyfile. - Quick Plot — select your dataset, choose "Line Plot", pick X and Y columns.
- Click Generate Plot — your figure appears instantly.
- Expand Export plot & data to download PNG, SVG, PDF, or CSV.
Your First Plot (Python API)
import numpy as np
import sys
sys.path.insert(0, "path/to/eagleplot")
from eagleplot.plotting import line_plot, save_figure
# Simulate absorbance vs. wavelength
wavelength = np.linspace(400, 800, 200)
absorbance = 0.8 * np.exp(-((wavelength - 520) ** 2) / (2 * 30**2))
fig, ax = line_plot(
wavelength,
[absorbance],
xlabel="Wavelength (nm)",
ylabel="Absorbance",
title="UV-Vis Spectrum",
labels=["Sample A"],
)
save_figure(fig, "spectrum.png", dpi=300)
Loading Data
The eagleplot.io module supports eight common formats.
from eagleplot.io import load_data, save_data
# Auto-detect format from extension
df = load_data("experiment.csv") # → pandas DataFrame
arr = load_data("matrix.npy") # → numpy array
obj = load_data("session.pkl") # → any Python object
Supported extensions:
| Extension | Format | Returns |
|---|---|---|
.csv |
Comma-separated values | pandas.DataFrame |
.xlsx |
Excel workbook | pandas.DataFrame |
.tsv |
Tab-separated values | pandas.DataFrame |
.json |
JSON | pandas.DataFrame |
.npy |
NumPy binary | numpy.ndarray |
.npz |
NumPy compressed | numpy.ndarray |
.pkl |
Python pickle | Any |
.parquet |
Parquet | pandas.DataFrame |
Computing Statistics
from eagleplot.math import calculate_statistics
stats = calculate_statistics(arr)
print(f"Mean: {stats['mean']:.4f}")
print(f"Std: {stats['std']:.4f}")
print(f"R: [{stats['min']:.3f}, {stats['max']:.3f}]")
Returns: mean, median, std, var, min, max, q1, q3, iqr, range.
Curve Fitting
from eagleplot.math import fit_linear, fit_polynomial
# Beer-Lambert: A = ε·c·l → linear fit
result = fit_linear(concentration, absorbance)
print(f"Slope (ε·l): {result['slope']:.4f}")
print(f"R²: {result['r_squared']:.4f}")
# Polynomial fit (degree 2)
poly = fit_polynomial(x, y, degree=2)
y_fit = poly["predict"](x) # call the returned predict function
All Plot Types
| Function | Library | Returns |
|---|---|---|
histogram(data) |
Matplotlib | fig, ax, info |
line_plot(x, y) |
Matplotlib | fig, ax |
scatter_plot(x, y) |
Matplotlib | fig, ax |
heatmap(matrix) |
Matplotlib | fig, ax |
contour_plot(X, Y, Z) |
Matplotlib | fig, ax |
distribution_plot(data) |
Seaborn | fig, ax |
box_plot(data) |
Seaborn | fig, ax |
regression_plot(x, y) |
Seaborn | fig, ax |
interactive_histogram(data) |
Plotly | plotly.Figure |
interactive_scatter(x, y) |
Plotly | plotly.Figure |
interactive_line(x, y) |
Plotly | plotly.Figure |
interactive_heatmap(matrix) |
Plotly | plotly.Figure |
interactive_3d_surface(X, Y, Z) |
Plotly | plotly.Figure |
Saving Figures
from eagleplot.plotting import save_figure
save_figure(fig, "plot.png", dpi=300) # high-res raster
save_figure(fig, "plot.svg") # vector (no dpi needed)
save_figure(fig, "plot.pdf") # vector, publication-ready
GUI Pages at a Glance
| Page | Purpose |
|---|---|
| Home | Dashboard overview and help tabs |
| Data Upload | Load files in 18 formats; preview shape, types, and statistics; batch folder import |
| Plot → Quick Plot | 27 plot types with live style controls and an annotation panel |
| Plot → Dashboard | Up to 4×4 grid layouts with axis sharing and combined export |
| Plot → Advanced Plotting | Seaborn statistical plots and Plotly interactive charts |
| Plot → Spectroscopy | IR/Raman, NMR, UV-Vis, Mass Spec; NIST WebBook lookup by CAS |
| Plot → Molecular Viz | Gaussian/ORCA/Molden output; 3D structure and vibrational modes |
| Analyze → Analysis Tools | Statistics, distributions, curve fitting, signal processing, peaks |
| Analyze → Batch Analysis | Batch statistics, curve fitting, and peak analysis with presets |
| Analyze → Data Tools | 12 non-destructive DataFrame operations |
| Export | Export plots, data, and analyses; save/load sessions; PDF reports |
| Gallery | Pre-rendered examples with "Use this config" buttons |
| Help | Getting started, plot types, analysis tools, formats, tips |
| Settings | Theme, plot defaults, and named preset management |
Common Workflows
Beer-Lambert calibration curve
from eagleplot.io import load_dataframe
from eagleplot.math import fit_linear
from eagleplot.plotting import scatter_plot, save_figure
import numpy as np
df = load_dataframe("calibration.csv") # columns: concentration, absorbance
result = fit_linear(df["concentration"].values, df["absorbance"].values)
x_fit = np.linspace(df["concentration"].min(), df["concentration"].max(), 100)
y_fit = result["slope"] * x_fit + result["intercept"]
fig, ax = scatter_plot(
df["concentration"].values,
df["absorbance"].values,
xlabel="Concentration (mM)",
ylabel="Absorbance (a.u.)",
title=f"Beer-Lambert: R² = {result['r_squared']:.4f}",
)
ax.plot(x_fit, y_fit, "r-", linewidth=2, label="Linear fit")
ax.legend()
save_figure(fig, "calibration.png", dpi=300)
Comparing multiple spectra
from eagleplot.plotting import line_plot
fig, ax = line_plot(
wavelength,
[spectrum_A, spectrum_B, spectrum_C],
labels=["Sample A", "Sample B", "Sample C"],
xlabel="Wavelength (nm)",
ylabel="Absorbance",
title="UV-Vis Comparison",
)
Next Steps
- Read the GUI Guide for a tour of every page.
- Read the CLI Guide for scripted and batch workflows.
- Keep the Cheatsheet handy as a quick reference to the Python API.
- Found a problem? See Reporting Bugs.
- Want something added? See Feature Requests.