Plottle › Cheatsheet

Plottle — Quick Reference Cheat Sheet

NCCU Department of Chemistry and Biochemistry


Setup

import sys
sys.path.insert(0, 'path/to/plottle')

from plottle.io import load_data, save_data
from plottle.math import calculate_statistics, fit_linear, fit_polynomial
from plottle.plotting import line_plot, scatter_plot, histogram, save_figure

I/O — Loading Data

from plottle.io import load_data, load_dataframe, load_numpy, load_pickle

df  = load_data('data.csv')       # auto-detect by extension
df  = load_dataframe('data.csv')  # → DataFrame  (.csv .xlsx .tsv .json .parquet)
arr = load_numpy('array.npy')     # → ndarray    (.npy .npz)
obj = load_pickle('data.pkl')     # → any object (.pkl)

I/O — Saving Data

from plottle.io import save_data, save_dataframe, save_numpy, save_pickle

save_data(df, 'output.csv')
save_dataframe(df, 'output.xlsx')
save_numpy(arr, 'matrix.npy')
save_pickle(obj, 'session.pkl')

Statistics

from plottle.math import (
    calculate_mean, calculate_median, calculate_std, calculate_statistics,
    check_normality,
)

mean = calculate_mean(arr)               # scalar or array
med  = calculate_median(arr)
std  = calculate_std(arr)                # sample std (ddof=1)

s = calculate_statistics(arr)
# Keys: mean, median, std, var, min, max, q1, q3, iqr, range

norm = check_normality(arr)
# Keys: statistic, p_value, is_normal (bool, α=0.05)

Curve Fitting

from plottle.math import fit_linear, fit_polynomial, fit_exponential, fit_custom

# Linear  y = m·x + b
r = fit_linear(x, y)
# r: slope, intercept, r_value, r_squared, p_value, std_err

# Polynomial  y = aₙxⁿ + … + a₀
r = fit_polynomial(x, y, degree=2)
# r: coefficients, degree, r_squared, residuals, predict(x_new)

# Exponential  y = a·exp(b·x)
r = fit_exponential(x, y)
# r: a, b, r_squared, predict(x_new)

# Custom function
def my_func(x, A, k, c):
    return A * np.exp(-k * x) + c

r = fit_custom(x, y, func=my_func, p0=[1.0, 0.1, 0.0])
# r: parameters (dict of fitted values), r_squared, predict(x_new)

Matplotlib Plots

from plottle.plotting import histogram, line_plot, scatter_plot, heatmap, contour_plot

# Histogram
fig, ax, info = histogram(data, bins=20, xlabel='Value', ylabel='Count', title='Distribution')
# info: n, bins, patches

# Line plot (single or multi-series)
fig, ax = line_plot(x, [y1, y2], labels=['A', 'B'],
                    xlabel='Time (s)', ylabel='Signal', title='Time Series')

# Scatter plot
fig, ax = scatter_plot(x, y, xlabel='Conc (mM)', ylabel='Abs', title='Calibration')

# Heatmap (2-D matrix)
fig, ax = heatmap(matrix, xlabel='Col', ylabel='Row', title='Correlation')

# Contour plot (requires 2-D meshgrid)
X, Y = np.meshgrid(x_vec, y_vec)
fig, ax = contour_plot(X, Y, Z, title='Potential Energy Surface')

Seaborn Plots

from plottle.plotting import distribution_plot, box_plot, regression_plot

fig, ax = distribution_plot(data, kind='kde')   # kind: hist | kde | ecdf
fig, ax = box_plot(df)                           # or box_plot(df, kind='violin')
fig, ax = regression_plot(x, y)                  # scatter + regression line + CI

Interactive (Plotly) Plots

from plottle.plotting import (
    interactive_histogram, interactive_scatter, interactive_line,
    interactive_heatmap, interactive_3d_surface,
)

fig = interactive_histogram(data, bins=20, title='Interactive Histogram')
fig = interactive_scatter(x, y, title='Click to Zoom')
fig = interactive_line(x, [y1, y2], labels=['A', 'B'])
fig = interactive_heatmap(matrix)
fig = interactive_3d_surface(X, Y, Z, title='3D Surface')

fig.show()                  # opens in browser
fig.write_html('plot.html') # save as self-contained HTML

Saving Figures

from plottle.plotting import save_figure

save_figure(fig, 'plot.png', dpi=150)   # screen quality
save_figure(fig, 'plot.png', dpi=300)   # print / publication quality
save_figure(fig, 'plot.svg')            # vector (editable in Illustrator/Inkscape)
save_figure(fig, 'plot.pdf')            # vector, LaTeX-ready

Figure Customization

import matplotlib.pyplot as plt

fig, ax = scatter_plot(x, y)

ax.set_xlim(0, 10)
ax.set_ylim(-1, 1)
ax.set_xlabel('Time (s)', fontsize=12)
ax.set_ylabel('Signal', fontsize=12)
ax.set_title('My Plot', fontsize=14)
ax.grid(True, linestyle='--', alpha=0.5)
ax.legend(loc='upper right')

# Add a second y-axis
ax2 = ax.twinx()
ax2.plot(x, y2, color='red', linestyle='--', label='Secondary')
ax2.set_ylabel('Secondary axis')

# Annotate a point
ax.annotate('Peak', xy=(x_peak, y_peak), xytext=(x_peak + 0.5, y_peak + 0.1),
            arrowprops=dict(arrowstyle='->'))

fig.tight_layout()

Using the CLI

# Quick plot from CSV
plottle plot data.csv --type line --xcol time --ycol signal --output fig.png

# Compute statistics
plottle stats data.csv --column signal

# Batch processing from config
plottle batch config.json

# Convert file formats
plottle convert data.csv output.pkl

# Show examples
plottle --examples

GUI Keyboard Shortcuts

Action How
Rerun page Press R or click Rerun in banner
Generate plot Click Generate Plot button
Clear annotations Click Clear markers button
Download figure Expand Export plot & data

Common Patterns

# ── Beer-Lambert calibration ──────────────────────────────────────────────
result = fit_linear(concentration, absorbance)
molar_absorptivity = result['slope'] / path_length   # ε = slope / l

# ── Normalize a spectrum ──────────────────────────────────────────────────
spectrum_norm = (spectrum - spectrum.min()) / (spectrum.max() - spectrum.min())

# ── Rolling average smoothing ─────────────────────────────────────────────
window = 5
smoothed = np.convolve(signal, np.ones(window) / window, mode='same')

# ── Multi-panel figure ────────────────────────────────────────────────────
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
axes[0].plot(x, y1)
axes[1].scatter(x, y2)
fig.tight_layout()
save_figure(fig, 'multipanel.png', dpi=300)

# ── Correlation matrix ────────────────────────────────────────────────────
corr = df.select_dtypes('number').corr().values
fig, ax = heatmap(corr, title='Correlation Matrix')

Color-Blind-Safe Palettes

# Available in the GUI Settings page and plot_config module
from plottle.utils.plot_config import COLOR_PALETTES

palettes = list(COLOR_PALETTES.keys())
# 'Default', 'Color-Blind Safe (Wong)', 'Color-Blind Safe (Okabe-Ito)',
# 'Muted (Tol)', 'Pastel', 'Vibrant'

colors = COLOR_PALETTES['Color-Blind Safe (Wong)']

Troubleshooting

Problem Fix
ModuleNotFoundError: seaborn pip install seaborn
streamlit: command not found python -m streamlit run gui.py
Port 8501 in use streamlit run gui.py --server.port 8502
Click-to-annotate not working pip install --upgrade streamlit (need ≥ 1.33)
Blank plot after widget change Click Generate Plot again
Figure looks blurry Use dpi=300 in save_figure()