eagleplot 3.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. eagleplot-3.0.0/LICENSE +21 -0
  2. eagleplot-3.0.0/PKG-INFO +304 -0
  3. eagleplot-3.0.0/README.md +246 -0
  4. eagleplot-3.0.0/eagleplot/Home.py +362 -0
  5. eagleplot-3.0.0/eagleplot/__init__.py +19 -0
  6. eagleplot-3.0.0/eagleplot/annotations.py +215 -0
  7. eagleplot-3.0.0/eagleplot/assets/logo.ico +0 -0
  8. eagleplot-3.0.0/eagleplot/assets/logo.png +0 -0
  9. eagleplot-3.0.0/eagleplot/assets/nccu-horiz-logo.png +0 -0
  10. eagleplot-3.0.0/eagleplot/assets/nccu-wings.png +0 -0
  11. eagleplot-3.0.0/eagleplot/batch.py +446 -0
  12. eagleplot-3.0.0/eagleplot/cli.py +719 -0
  13. eagleplot-3.0.0/eagleplot/data_tools.py +849 -0
  14. eagleplot-3.0.0/eagleplot/example-data/Artificial/bimodal_distribution.csv +501 -0
  15. eagleplot-3.0.0/eagleplot/example-data/Artificial/correlation_matrix.npy +0 -0
  16. eagleplot-3.0.0/eagleplot/example-data/Artificial/gaussian_surface.npy +0 -0
  17. eagleplot-3.0.0/eagleplot/example-data/Artificial/grouped_categorical.csv +241 -0
  18. eagleplot-3.0.0/eagleplot/example-data/Artificial/ir_spectrum.csv +1802 -0
  19. eagleplot-3.0.0/eagleplot/example-data/Artificial/molecular_properties.csv +121 -0
  20. eagleplot-3.0.0/eagleplot/example-data/Artificial/normal_distribution.csv +401 -0
  21. eagleplot-3.0.0/eagleplot/example-data/Artificial/reaction_kinetics.csv +121 -0
  22. eagleplot-3.0.0/eagleplot/example-data/Artificial/scatter_correlation.csv +201 -0
  23. eagleplot-3.0.0/eagleplot/example-data/Artificial/sine_cosine_waves.csv +301 -0
  24. eagleplot-3.0.0/eagleplot/gallery/box_plot.png +0 -0
  25. eagleplot-3.0.0/eagleplot/gallery/contour_plot.png +0 -0
  26. eagleplot-3.0.0/eagleplot/gallery/distribution_plot.png +0 -0
  27. eagleplot-3.0.0/eagleplot/gallery/heatmap.png +0 -0
  28. eagleplot-3.0.0/eagleplot/gallery/histogram.png +0 -0
  29. eagleplot-3.0.0/eagleplot/gallery/interactive_3d_surface.png +0 -0
  30. eagleplot-3.0.0/eagleplot/gallery/interactive_heatmap.png +0 -0
  31. eagleplot-3.0.0/eagleplot/gallery/interactive_histogram.png +0 -0
  32. eagleplot-3.0.0/eagleplot/gallery/interactive_line.png +0 -0
  33. eagleplot-3.0.0/eagleplot/gallery/interactive_scatter.png +0 -0
  34. eagleplot-3.0.0/eagleplot/gallery/line_plot.png +0 -0
  35. eagleplot-3.0.0/eagleplot/gallery/manifest.json +196 -0
  36. eagleplot-3.0.0/eagleplot/gallery/regression_plot.png +0 -0
  37. eagleplot-3.0.0/eagleplot/gallery/scatter_plot.png +0 -0
  38. eagleplot-3.0.0/eagleplot/io.py +1008 -0
  39. eagleplot-3.0.0/eagleplot/math.py +1210 -0
  40. eagleplot-3.0.0/eagleplot/molecular/__init__.py +21 -0
  41. eagleplot-3.0.0/eagleplot/molecular/atom_data.py +287 -0
  42. eagleplot-3.0.0/eagleplot/molecular/parsers.py +747 -0
  43. eagleplot-3.0.0/eagleplot/nist.py +241 -0
  44. eagleplot-3.0.0/eagleplot/pages/10_Molecular_Viz.py +225 -0
  45. eagleplot-3.0.0/eagleplot/pages/11_Batch_Analysis.py +325 -0
  46. eagleplot-3.0.0/eagleplot/pages/12_Help.py +199 -0
  47. eagleplot-3.0.0/eagleplot/pages/13_Settings.py +388 -0
  48. eagleplot-3.0.0/eagleplot/pages/1_Data_Upload.py +521 -0
  49. eagleplot-3.0.0/eagleplot/pages/2_Quick_Plot.py +1693 -0
  50. eagleplot-3.0.0/eagleplot/pages/3_Analysis_Tools.py +2510 -0
  51. eagleplot-3.0.0/eagleplot/pages/4_Multi_Plot_Dashboard.py +791 -0
  52. eagleplot-3.0.0/eagleplot/pages/5_Advanced_Plotting.py +691 -0
  53. eagleplot-3.0.0/eagleplot/pages/6_Export_Results.py +442 -0
  54. eagleplot-3.0.0/eagleplot/pages/7_Gallery.py +201 -0
  55. eagleplot-3.0.0/eagleplot/pages/8_Data_Tools.py +434 -0
  56. eagleplot-3.0.0/eagleplot/pages/9_Spectroscopy.py +821 -0
  57. eagleplot-3.0.0/eagleplot/pages/__init__.py +8 -0
  58. eagleplot-3.0.0/eagleplot/peaks.py +513 -0
  59. eagleplot-3.0.0/eagleplot/plotting.py +2630 -0
  60. eagleplot-3.0.0/eagleplot/plugin_loader.py +208 -0
  61. eagleplot-3.0.0/eagleplot/report.py +448 -0
  62. eagleplot-3.0.0/eagleplot/signal.py +494 -0
  63. eagleplot-3.0.0/eagleplot/spectroscopy.py +830 -0
  64. eagleplot-3.0.0/eagleplot/utils/__init__.py +76 -0
  65. eagleplot-3.0.0/eagleplot/utils/access.py +77 -0
  66. eagleplot-3.0.0/eagleplot/utils/data_preview.py +352 -0
  67. eagleplot-3.0.0/eagleplot/utils/plot_config.py +2721 -0
  68. eagleplot-3.0.0/eagleplot/utils/session_state.py +535 -0
  69. eagleplot-3.0.0/eagleplot/utils/theming.py +312 -0
  70. eagleplot-3.0.0/eagleplot/utils/user_settings.py +294 -0
  71. eagleplot-3.0.0/eagleplot.egg-info/PKG-INFO +304 -0
  72. eagleplot-3.0.0/eagleplot.egg-info/SOURCES.txt +101 -0
  73. eagleplot-3.0.0/eagleplot.egg-info/dependency_links.txt +1 -0
  74. eagleplot-3.0.0/eagleplot.egg-info/entry_points.txt +2 -0
  75. eagleplot-3.0.0/eagleplot.egg-info/requires.txt +39 -0
  76. eagleplot-3.0.0/eagleplot.egg-info/top_level.txt +1 -0
  77. eagleplot-3.0.0/pyproject.toml +150 -0
  78. eagleplot-3.0.0/setup.cfg +4 -0
  79. eagleplot-3.0.0/tests/test_annotations.py +248 -0
  80. eagleplot-3.0.0/tests/test_batch.py +538 -0
  81. eagleplot-3.0.0/tests/test_cli.py +557 -0
  82. eagleplot-3.0.0/tests/test_data_tools.py +617 -0
  83. eagleplot-3.0.0/tests/test_docs_consistency.py +118 -0
  84. eagleplot-3.0.0/tests/test_docs_site.py +181 -0
  85. eagleplot-3.0.0/tests/test_gui_pages.py +44 -0
  86. eagleplot-3.0.0/tests/test_gui_paths.py +139 -0
  87. eagleplot-3.0.0/tests/test_gui_safety.py +163 -0
  88. eagleplot-3.0.0/tests/test_integration.py +360 -0
  89. eagleplot-3.0.0/tests/test_io.py +704 -0
  90. eagleplot-3.0.0/tests/test_math.py +700 -0
  91. eagleplot-3.0.0/tests/test_molecular_parsers.py +582 -0
  92. eagleplot-3.0.0/tests/test_nist.py +209 -0
  93. eagleplot-3.0.0/tests/test_peaks.py +455 -0
  94. eagleplot-3.0.0/tests/test_plotting.py +1101 -0
  95. eagleplot-3.0.0/tests/test_plotting_advanced.py +689 -0
  96. eagleplot-3.0.0/tests/test_plugin_loader.py +286 -0
  97. eagleplot-3.0.0/tests/test_rename_compat.py +86 -0
  98. eagleplot-3.0.0/tests/test_repo_hygiene.py +69 -0
  99. eagleplot-3.0.0/tests/test_report.py +396 -0
  100. eagleplot-3.0.0/tests/test_signal.py +365 -0
  101. eagleplot-3.0.0/tests/test_spectroscopy.py +648 -0
  102. eagleplot-3.0.0/tests/test_theming.py +275 -0
  103. eagleplot-3.0.0/tests/test_utils.py +1109 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jonathan D. Schultz, North Carolina Central University
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,304 @@
1
+ Metadata-Version: 2.4
2
+ Name: eagleplot
3
+ Version: 3.0.0
4
+ Summary: A general-purpose Python toolkit for scientific data visualization and analysis
5
+ Author-email: "Jonathan D. Schultz" <jschult3@nccu.edu>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/The-Schultz-Lab/eagleplot
8
+ Project-URL: Repository, https://github.com/The-Schultz-Lab/eagleplot
9
+ Project-URL: Documentation, https://the-schultz-lab.github.io/eagleplot/
10
+ Project-URL: Bug Tracker, https://github.com/The-Schultz-Lab/eagleplot/issues
11
+ Project-URL: Changelog, https://github.com/The-Schultz-Lab/eagleplot/blob/main/CHANGELOG.md
12
+ Keywords: visualization,plotting,science,chemistry,matplotlib,plotly,streamlit
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Intended Audience :: Education
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Topic :: Scientific/Engineering :: Visualization
22
+ Classifier: Topic :: Scientific/Engineering :: Chemistry
23
+ Requires-Python: !=3.9.7,>=3.9
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: numpy>=1.24.0
27
+ Requires-Dist: scipy>=1.10.0
28
+ Requires-Dist: pandas>=2.0.0
29
+ Requires-Dist: matplotlib>=3.7.0
30
+ Requires-Dist: seaborn>=0.12.0
31
+ Requires-Dist: plotly>=5.14.0
32
+ Requires-Dist: streamlit>=1.49.0
33
+ Requires-Dist: openpyxl>=3.1.0
34
+ Requires-Dist: PyYAML>=6.0
35
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11"
36
+ Provides-Extra: formats
37
+ Requires-Dist: h5py>=3.0.0; extra == "formats"
38
+ Requires-Dist: xarray>=0.20.0; extra == "formats"
39
+ Requires-Dist: netcdf4>=1.6.0; extra == "formats"
40
+ Provides-Extra: nist
41
+ Requires-Dist: requests>=2.28.0; extra == "nist"
42
+ Provides-Extra: docs
43
+ Requires-Dist: markdown>=3.5; extra == "docs"
44
+ Provides-Extra: test
45
+ Requires-Dist: pytest>=7.4.0; extra == "test"
46
+ Requires-Dist: pytest-cov>=4.1.0; extra == "test"
47
+ Provides-Extra: dev
48
+ Requires-Dist: eagleplot[test]; extra == "dev"
49
+ Requires-Dist: ruff==0.17.3; extra == "dev"
50
+ Requires-Dist: mypy==2.4.1; extra == "dev"
51
+ Requires-Dist: types-PyYAML>=6.0.12.20250915; extra == "dev"
52
+ Requires-Dist: types-requests>=2.28.0; extra == "dev"
53
+ Requires-Dist: build>=1.4.3; extra == "dev"
54
+ Requires-Dist: twine>=5.0.0; extra == "dev"
55
+ Provides-Extra: all
56
+ Requires-Dist: eagleplot[formats,nist]; extra == "all"
57
+ Dynamic: license-file
58
+
59
+ # EaglePlot
60
+
61
+ [![Tests](https://github.com/The-Schultz-Lab/eagleplot/actions/workflows/tests.yml/badge.svg)](https://github.com/The-Schultz-Lab/eagleplot/actions/workflows/tests.yml)
62
+ [![PyPI](https://img.shields.io/pypi/v/eagleplot)](https://pypi.org/project/eagleplot/)
63
+ [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/The-Schultz-Lab/eagleplot/main)
64
+
65
+ A general-purpose Python toolkit for scientific data visualization and analysis, developed for research and teaching in computational science at North Carolina Central University.
66
+
67
+ > **EaglePlot was called Plottle until version 3.0.** If you used Plottle, change
68
+ > `import plottle` / `from plottle.… import …` to `eagleplot`, and run the `eagleplot`
69
+ > command instead of `plottle`. Session files saved by Plottle still load.
70
+
71
+ ## Overview
72
+
73
+ EaglePlot provides a unified interface for scientific data work:
74
+
75
+ - **Data I/O** — 18 file formats (CSV, Excel, TSV, JSON, Parquet, NumPy, Pickle, JCAMP-DX, HDF5, NetCDF, SPC, ASC, mzML/mzXML, and more)
76
+ - **Mathematical analysis** — statistics, curve fitting, signal processing, peak analysis, hypothesis testing, optimization, linear algebra
77
+ - **Multi-library plotting** — 27 plot types across Matplotlib (static), Seaborn (statistical), and Plotly (interactive)
78
+ - **14-page Streamlit GUI** — exploratory data analysis without writing code
79
+ - **CLI** — batch processing and scripted workflows
80
+ - **Plugin system** — drop `plugin_*.py` into `plugins/` for custom plot types and tools
81
+
82
+ ## Quick Start
83
+
84
+ ### Clone the repository
85
+
86
+ #### 1 — Clone and enter the repository
87
+
88
+ ```bash
89
+ git clone https://github.com/The-Schultz-Lab/eagleplot.git
90
+ cd eagleplot
91
+ ```
92
+
93
+ #### 2 — Set up and launch (double-click, no terminal needed)
94
+
95
+ **Windows:**
96
+ 1. Double-click **`setup.bat`** — creates the virtual environment and installs all dependencies.
97
+ 2. Double-click **`launch.bat`** — starts EaglePlot. Use this every time you want to open the app.
98
+
99
+ **macOS:**
100
+ 1. Double-click **`setup.command`** — creates the virtual environment and installs all dependencies.
101
+ *(If macOS asks "Are you sure you want to open it?", click Open.)*
102
+ 2. Double-click **`launch.command`** — starts EaglePlot. Use this every time you want to open the app.
103
+
104
+ **Linux:**
105
+ 1. Run **`./setup.sh`** in a terminal — creates the virtual environment and installs all dependencies.
106
+ *(On Debian/Ubuntu you may first need `sudo apt install python3-venv`.)*
107
+ 2. Run **`./launch.sh`** — starts EaglePlot.
108
+
109
+ After the app starts, open **`http://localhost:8501`** in your browser (Streamlit usually opens it automatically).
110
+
111
+ #### 2 (alternative) — Set up and launch from the terminal
112
+
113
+ ```bash
114
+ python -m venv .venv
115
+
116
+ # Windows
117
+ .venv\Scripts\activate
118
+
119
+ # macOS / Linux
120
+ source .venv/bin/activate
121
+
122
+ # Install EaglePlot and its dependencies. The editable install is what puts the
123
+ # `eagleplot` command on your PATH.
124
+ pip install -e ".[formats,nist]"
125
+
126
+ streamlit run eagleplot/Home.py
127
+ ```
128
+
129
+ #### 3 — Or use the CLI
130
+
131
+ ```bash
132
+ eagleplot --help
133
+ eagleplot plot data.csv --plot scatter --x-column x --y-column y
134
+ eagleplot stats data.csv
135
+ ```
136
+
137
+ The `eagleplot` command comes from the `pip install` above. From a source checkout
138
+ without installing, use `python -m eagleplot.cli` instead.
139
+
140
+ ## GUI Pages
141
+
142
+ | Page | Description |
143
+ | --- | --- |
144
+ | **Home** | Dashboard overview and help tabs |
145
+ | **1 — Data Upload** | Upload files in 18 formats; preview shape, column types, and summary statistics; batch folder import |
146
+ | **2 — Quick Plot** | 27 plot types with live style controls, annotation panel, and Convert to Plotly toggle |
147
+ | **3 — Analysis Tools** | 8 tabs: Statistics, Distribution, Curve Fit, Optimization, Linear Algebra, Signal Processing, Peak Analysis, Statistical Tests |
148
+ | **4 — Multi-Plot Dashboard** | Up to 4×4 grid layouts with axis sharing and combined PNG/PDF export |
149
+ | **5 — Advanced Plotting** | Seaborn statistical plots and Plotly interactive charts with HTML export |
150
+ | **7 — Export Results** | Export plots, data, and analyses; save/load full sessions; generate PDF reports |
151
+ | **8 — Gallery** | Pre-generated figure gallery with Load this config buttons |
152
+ | **9 — Data Tools** | 10 operation tabs: formula columns, normalization, transpose, pivot/melt, filter, sort, merge, fill/drop NaN, resample, rolling transforms |
153
+ | **10 — Spectroscopy** | IR/Raman, NMR, UV-Vis, Mass Spec tools; NIST WebBook spectral lookup by CAS number |
154
+ | **11 — Molecular Viz** | Upload Gaussian/ORCA/Molden output files; 3D molecular structure and vibrational mode display |
155
+ | **12 — Batch Analysis** | Batch statistics, curve fitting, and peak analysis with workflow presets |
156
+ | **13 — Help** | Getting Started, Plot Types, Analysis Tools, Supported Formats, Tips |
157
+ | **14 — Settings** | Theme, DPI, plot defaults, named preset CRUD, plugin status |
158
+
159
+ ## Supported File Formats (18)
160
+
161
+ | Category | Formats |
162
+ | --- | --- |
163
+ | Tabular | `.csv`, `.tsv`, `.xlsx`, `.xls`, `.json`, `.parquet` |
164
+ | Array | `.npy`, `.npz`, `.pkl` |
165
+ | Instrument / Spectral | `.jdx` / `.dx` (JCAMP-DX), `.h5` / `.hdf5` (HDF5), `.nc` / `.cdf` (NetCDF), `.spc` (Thermo Fisher), `.asc` (generic text), `.mzml` / `.mzxml` (mass spectrometry, optional) |
166
+
167
+ ## CLI
168
+
169
+ EaglePlot includes a command-line interface with 5 subcommands:
170
+
171
+ ```bash
172
+ eagleplot plot <file> --plot <type> --x-column X --y-column Y [--output out.png]
173
+ eagleplot stats <file>
174
+ eagleplot batch <config.json> [--verbose]
175
+ eagleplot compare <file1> <file2> --plot line [--output comparison.png]
176
+ eagleplot convert <input> <output>
177
+ ```
178
+
179
+ See the [CLI Tutorial](docs/tutorials/cli_guide.md) for full usage and examples.
180
+
181
+ ## Python API
182
+
183
+ EaglePlot's modules can be used directly in scripts or Jupyter notebooks:
184
+
185
+ ```python
186
+ from eagleplot.io import load_data
187
+ from eagleplot.plotting import line_plot, save_figure
188
+ import numpy as np
189
+
190
+ wavelength = np.linspace(400, 800, 200)
191
+ absorbance = 0.8 * np.exp(-((wavelength - 520) ** 2) / (2 * 30**2))
192
+
193
+ fig, ax, info = line_plot(
194
+ wavelength,
195
+ [absorbance],
196
+ xlabel="Wavelength (nm)",
197
+ ylabel="Absorbance",
198
+ title="UV-Vis Spectrum",
199
+ labels=["Sample A"],
200
+ )
201
+ save_figure(fig, "spectrum.png", dpi=300)
202
+ ```
203
+
204
+ ### Key modules
205
+
206
+ | Module | Description |
207
+ | --- | --- |
208
+ | `eagleplot.io` | `load_data()` / `save_data()` — auto-detects format from extension |
209
+ | `eagleplot.math` | 25 functions — statistics, curve fitting, hypothesis tests, optimization, linear algebra |
210
+ | `eagleplot.plotting` | 27 plot types; Matplotlib → `(fig, ax, info)`, Plotly → `(fig, info)` |
211
+ | `eagleplot.signal` | 16 functions — smoothing, filtering, FFT, derivatives, baseline correction, interpolation |
212
+ | `eagleplot.peaks` | 5 functions — find, integrate, FWHM, fit (Gaussian/Lorentzian/Voigt/pseudo-Voigt) |
213
+ | `eagleplot.data_tools` | 12 non-destructive DataFrame operations |
214
+ | `eagleplot.spectroscopy` | 18 functions — IR/Raman, UV-Vis, NMR, MS |
215
+ | `eagleplot.nist` | NIST WebBook integration — fetch IR spectra by CAS number |
216
+ | `eagleplot.batch` | Batch load, statistics, curve fit, peak analysis |
217
+ | `eagleplot.annotations` | 7 overlay types (hline, vline, hspan, vspan, text, rectangle, ellipse) |
218
+ | `eagleplot.report` | PDF report generation via `matplotlib.PdfPages` |
219
+ | `eagleplot.molecular` | CPK atom data, Gaussian/ORCA/Molden parsers, Plotly 3D molecule builder |
220
+
221
+ ## Plugin System
222
+
223
+ Drop a `plugin_*.py` file into `plugins/` to add custom plot types or analysis tools.
224
+ See [`plugins/plugin_example.py`](plugins/plugin_example.py) for the starter template.
225
+
226
+ ## Dependencies
227
+
228
+ | Package | Purpose |
229
+ | --- | --- |
230
+ | `numpy` | Numerical computing |
231
+ | `scipy` | Scientific algorithms, curve fitting, signal processing |
232
+ | `pandas` | Tabular data |
233
+ | `matplotlib` | Static plotting |
234
+ | `seaborn` | Statistical visualizations |
235
+ | `plotly` | Interactive plots |
236
+ | `streamlit` | GUI framework |
237
+ | `openpyxl` | Excel file support |
238
+ | `requests` | NIST WebBook HTTP integration |
239
+ | `h5py` | HDF5 file support |
240
+ | `xarray` / `netcdf4` | NetCDF file support |
241
+
242
+ **Optional:**
243
+
244
+ | Package | Purpose |
245
+ | --- | --- |
246
+ | `statsmodels` | Two-way ANOVA (`anova_twoway` in `eagleplot.math`) |
247
+ | `pymzml` | mzML/mzXML mass spectrometry files |
248
+ | `jcamp` | Alternative JCAMP-DX parser |
249
+
250
+ See [`requirements.txt`](requirements.txt) for pinned version ranges.
251
+
252
+ ## Project Structure
253
+
254
+ ```text
255
+ eagleplot/ ← repository root
256
+ ├── eagleplot/ ← the installable package
257
+ │ ├── Home.py ← Streamlit entry point
258
+ │ ├── cli.py ← CLI entry point (5 subcommands)
259
+ │ ├── io.py ← 18-format data loader/saver
260
+ │ ├── math.py ← 25 analysis functions
261
+ │ ├── plotting.py ← 27 plot types (Matplotlib, Seaborn, Plotly)
262
+ │ ├── signal.py ← 16 signal processing functions
263
+ │ ├── peaks.py ← 5 peak analysis functions
264
+ │ ├── data_tools.py ← 12 non-destructive DataFrame operations
265
+ │ ├── annotations.py ← 7 Matplotlib overlay types
266
+ │ ├── spectroscopy.py ← 18 spectroscopy functions
267
+ │ ├── nist.py ← NIST WebBook integration
268
+ │ ├── batch.py ← 5 batch processing functions
269
+ │ ├── report.py ← PDF report generation
270
+ │ ├── plugin_loader.py ← plugin discovery and loading
271
+ │ ├── molecular/ ← CPK atom data + vibrational parsers
272
+ │ ├── pages/ ← 13 Streamlit pages (1_*.py – 13_*.py)
273
+ │ ├── utils/ ← session state, plot config, user settings
274
+ │ ├── assets/ ← logo + NCCU branding (shipped in the wheel)
275
+ │ ├── gallery/ ← pre-rendered gallery PNGs + manifest.json
276
+ │ └── example-data/Artificial/ ← built-in sample datasets
277
+ ├── tests/ ← pytest suite, 1,000+ tests
278
+ ├── plugins/ ← plugin_example.py starter template
279
+ ├── examples/ ← 15+ standalone scripts + batch_config.json
280
+ ├── docs/ ← tutorials, cheatsheet, site built by build_docs.py
281
+ ├── generate_gallery.py ← regenerates eagleplot/gallery/
282
+ ├── requirements.txt
283
+ ├── pyproject.toml
284
+ ├── setup.bat / .command / .sh ← First-run setup (Windows / macOS / Linux)
285
+ └── launch.bat / .command / .sh ← App launcher (Windows / macOS / Linux)
286
+ ```
287
+
288
+ Runtime assets (`assets/`, `gallery/`, `example-data/`) live **inside** the package
289
+ rather than at the repository root, so they are present after `pip install`.
290
+
291
+ ## Documentation
292
+
293
+ - [Getting Started](docs/getting_started.md) — installation walkthrough and API examples
294
+ - [Cheatsheet](docs/cheatsheet.md) — quick reference for all plot functions
295
+ - [CLI Tutorial](docs/tutorials/cli_guide.md) — step-by-step guide to all 5 CLI commands
296
+ - [GUI Tutorial](docs/tutorials/gui_guide.md) — page-by-page walkthrough of the Streamlit app
297
+ - [Examples](examples/) — 15+ standalone runnable scripts covering all major workflows
298
+
299
+ ## About
300
+
301
+ **Author:** Jonathan D. Schultz, PhD — NCCU Department of Chemistry and Biochemistry
302
+ **Institution:** North Carolina Central University
303
+ **Use:** Research and teaching in computational science
304
+ **License:** See [LICENSE](LICENSE)
@@ -0,0 +1,246 @@
1
+ # EaglePlot
2
+
3
+ [![Tests](https://github.com/The-Schultz-Lab/eagleplot/actions/workflows/tests.yml/badge.svg)](https://github.com/The-Schultz-Lab/eagleplot/actions/workflows/tests.yml)
4
+ [![PyPI](https://img.shields.io/pypi/v/eagleplot)](https://pypi.org/project/eagleplot/)
5
+ [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/The-Schultz-Lab/eagleplot/main)
6
+
7
+ A general-purpose Python toolkit for scientific data visualization and analysis, developed for research and teaching in computational science at North Carolina Central University.
8
+
9
+ > **EaglePlot was called Plottle until version 3.0.** If you used Plottle, change
10
+ > `import plottle` / `from plottle.… import …` to `eagleplot`, and run the `eagleplot`
11
+ > command instead of `plottle`. Session files saved by Plottle still load.
12
+
13
+ ## Overview
14
+
15
+ EaglePlot provides a unified interface for scientific data work:
16
+
17
+ - **Data I/O** — 18 file formats (CSV, Excel, TSV, JSON, Parquet, NumPy, Pickle, JCAMP-DX, HDF5, NetCDF, SPC, ASC, mzML/mzXML, and more)
18
+ - **Mathematical analysis** — statistics, curve fitting, signal processing, peak analysis, hypothesis testing, optimization, linear algebra
19
+ - **Multi-library plotting** — 27 plot types across Matplotlib (static), Seaborn (statistical), and Plotly (interactive)
20
+ - **14-page Streamlit GUI** — exploratory data analysis without writing code
21
+ - **CLI** — batch processing and scripted workflows
22
+ - **Plugin system** — drop `plugin_*.py` into `plugins/` for custom plot types and tools
23
+
24
+ ## Quick Start
25
+
26
+ ### Clone the repository
27
+
28
+ #### 1 — Clone and enter the repository
29
+
30
+ ```bash
31
+ git clone https://github.com/The-Schultz-Lab/eagleplot.git
32
+ cd eagleplot
33
+ ```
34
+
35
+ #### 2 — Set up and launch (double-click, no terminal needed)
36
+
37
+ **Windows:**
38
+ 1. Double-click **`setup.bat`** — creates the virtual environment and installs all dependencies.
39
+ 2. Double-click **`launch.bat`** — starts EaglePlot. Use this every time you want to open the app.
40
+
41
+ **macOS:**
42
+ 1. Double-click **`setup.command`** — creates the virtual environment and installs all dependencies.
43
+ *(If macOS asks "Are you sure you want to open it?", click Open.)*
44
+ 2. Double-click **`launch.command`** — starts EaglePlot. Use this every time you want to open the app.
45
+
46
+ **Linux:**
47
+ 1. Run **`./setup.sh`** in a terminal — creates the virtual environment and installs all dependencies.
48
+ *(On Debian/Ubuntu you may first need `sudo apt install python3-venv`.)*
49
+ 2. Run **`./launch.sh`** — starts EaglePlot.
50
+
51
+ After the app starts, open **`http://localhost:8501`** in your browser (Streamlit usually opens it automatically).
52
+
53
+ #### 2 (alternative) — Set up and launch from the terminal
54
+
55
+ ```bash
56
+ python -m venv .venv
57
+
58
+ # Windows
59
+ .venv\Scripts\activate
60
+
61
+ # macOS / Linux
62
+ source .venv/bin/activate
63
+
64
+ # Install EaglePlot and its dependencies. The editable install is what puts the
65
+ # `eagleplot` command on your PATH.
66
+ pip install -e ".[formats,nist]"
67
+
68
+ streamlit run eagleplot/Home.py
69
+ ```
70
+
71
+ #### 3 — Or use the CLI
72
+
73
+ ```bash
74
+ eagleplot --help
75
+ eagleplot plot data.csv --plot scatter --x-column x --y-column y
76
+ eagleplot stats data.csv
77
+ ```
78
+
79
+ The `eagleplot` command comes from the `pip install` above. From a source checkout
80
+ without installing, use `python -m eagleplot.cli` instead.
81
+
82
+ ## GUI Pages
83
+
84
+ | Page | Description |
85
+ | --- | --- |
86
+ | **Home** | Dashboard overview and help tabs |
87
+ | **1 — Data Upload** | Upload files in 18 formats; preview shape, column types, and summary statistics; batch folder import |
88
+ | **2 — Quick Plot** | 27 plot types with live style controls, annotation panel, and Convert to Plotly toggle |
89
+ | **3 — Analysis Tools** | 8 tabs: Statistics, Distribution, Curve Fit, Optimization, Linear Algebra, Signal Processing, Peak Analysis, Statistical Tests |
90
+ | **4 — Multi-Plot Dashboard** | Up to 4×4 grid layouts with axis sharing and combined PNG/PDF export |
91
+ | **5 — Advanced Plotting** | Seaborn statistical plots and Plotly interactive charts with HTML export |
92
+ | **7 — Export Results** | Export plots, data, and analyses; save/load full sessions; generate PDF reports |
93
+ | **8 — Gallery** | Pre-generated figure gallery with Load this config buttons |
94
+ | **9 — Data Tools** | 10 operation tabs: formula columns, normalization, transpose, pivot/melt, filter, sort, merge, fill/drop NaN, resample, rolling transforms |
95
+ | **10 — Spectroscopy** | IR/Raman, NMR, UV-Vis, Mass Spec tools; NIST WebBook spectral lookup by CAS number |
96
+ | **11 — Molecular Viz** | Upload Gaussian/ORCA/Molden output files; 3D molecular structure and vibrational mode display |
97
+ | **12 — Batch Analysis** | Batch statistics, curve fitting, and peak analysis with workflow presets |
98
+ | **13 — Help** | Getting Started, Plot Types, Analysis Tools, Supported Formats, Tips |
99
+ | **14 — Settings** | Theme, DPI, plot defaults, named preset CRUD, plugin status |
100
+
101
+ ## Supported File Formats (18)
102
+
103
+ | Category | Formats |
104
+ | --- | --- |
105
+ | Tabular | `.csv`, `.tsv`, `.xlsx`, `.xls`, `.json`, `.parquet` |
106
+ | Array | `.npy`, `.npz`, `.pkl` |
107
+ | Instrument / Spectral | `.jdx` / `.dx` (JCAMP-DX), `.h5` / `.hdf5` (HDF5), `.nc` / `.cdf` (NetCDF), `.spc` (Thermo Fisher), `.asc` (generic text), `.mzml` / `.mzxml` (mass spectrometry, optional) |
108
+
109
+ ## CLI
110
+
111
+ EaglePlot includes a command-line interface with 5 subcommands:
112
+
113
+ ```bash
114
+ eagleplot plot <file> --plot <type> --x-column X --y-column Y [--output out.png]
115
+ eagleplot stats <file>
116
+ eagleplot batch <config.json> [--verbose]
117
+ eagleplot compare <file1> <file2> --plot line [--output comparison.png]
118
+ eagleplot convert <input> <output>
119
+ ```
120
+
121
+ See the [CLI Tutorial](docs/tutorials/cli_guide.md) for full usage and examples.
122
+
123
+ ## Python API
124
+
125
+ EaglePlot's modules can be used directly in scripts or Jupyter notebooks:
126
+
127
+ ```python
128
+ from eagleplot.io import load_data
129
+ from eagleplot.plotting import line_plot, save_figure
130
+ import numpy as np
131
+
132
+ wavelength = np.linspace(400, 800, 200)
133
+ absorbance = 0.8 * np.exp(-((wavelength - 520) ** 2) / (2 * 30**2))
134
+
135
+ fig, ax, info = line_plot(
136
+ wavelength,
137
+ [absorbance],
138
+ xlabel="Wavelength (nm)",
139
+ ylabel="Absorbance",
140
+ title="UV-Vis Spectrum",
141
+ labels=["Sample A"],
142
+ )
143
+ save_figure(fig, "spectrum.png", dpi=300)
144
+ ```
145
+
146
+ ### Key modules
147
+
148
+ | Module | Description |
149
+ | --- | --- |
150
+ | `eagleplot.io` | `load_data()` / `save_data()` — auto-detects format from extension |
151
+ | `eagleplot.math` | 25 functions — statistics, curve fitting, hypothesis tests, optimization, linear algebra |
152
+ | `eagleplot.plotting` | 27 plot types; Matplotlib → `(fig, ax, info)`, Plotly → `(fig, info)` |
153
+ | `eagleplot.signal` | 16 functions — smoothing, filtering, FFT, derivatives, baseline correction, interpolation |
154
+ | `eagleplot.peaks` | 5 functions — find, integrate, FWHM, fit (Gaussian/Lorentzian/Voigt/pseudo-Voigt) |
155
+ | `eagleplot.data_tools` | 12 non-destructive DataFrame operations |
156
+ | `eagleplot.spectroscopy` | 18 functions — IR/Raman, UV-Vis, NMR, MS |
157
+ | `eagleplot.nist` | NIST WebBook integration — fetch IR spectra by CAS number |
158
+ | `eagleplot.batch` | Batch load, statistics, curve fit, peak analysis |
159
+ | `eagleplot.annotations` | 7 overlay types (hline, vline, hspan, vspan, text, rectangle, ellipse) |
160
+ | `eagleplot.report` | PDF report generation via `matplotlib.PdfPages` |
161
+ | `eagleplot.molecular` | CPK atom data, Gaussian/ORCA/Molden parsers, Plotly 3D molecule builder |
162
+
163
+ ## Plugin System
164
+
165
+ Drop a `plugin_*.py` file into `plugins/` to add custom plot types or analysis tools.
166
+ See [`plugins/plugin_example.py`](plugins/plugin_example.py) for the starter template.
167
+
168
+ ## Dependencies
169
+
170
+ | Package | Purpose |
171
+ | --- | --- |
172
+ | `numpy` | Numerical computing |
173
+ | `scipy` | Scientific algorithms, curve fitting, signal processing |
174
+ | `pandas` | Tabular data |
175
+ | `matplotlib` | Static plotting |
176
+ | `seaborn` | Statistical visualizations |
177
+ | `plotly` | Interactive plots |
178
+ | `streamlit` | GUI framework |
179
+ | `openpyxl` | Excel file support |
180
+ | `requests` | NIST WebBook HTTP integration |
181
+ | `h5py` | HDF5 file support |
182
+ | `xarray` / `netcdf4` | NetCDF file support |
183
+
184
+ **Optional:**
185
+
186
+ | Package | Purpose |
187
+ | --- | --- |
188
+ | `statsmodels` | Two-way ANOVA (`anova_twoway` in `eagleplot.math`) |
189
+ | `pymzml` | mzML/mzXML mass spectrometry files |
190
+ | `jcamp` | Alternative JCAMP-DX parser |
191
+
192
+ See [`requirements.txt`](requirements.txt) for pinned version ranges.
193
+
194
+ ## Project Structure
195
+
196
+ ```text
197
+ eagleplot/ ← repository root
198
+ ├── eagleplot/ ← the installable package
199
+ │ ├── Home.py ← Streamlit entry point
200
+ │ ├── cli.py ← CLI entry point (5 subcommands)
201
+ │ ├── io.py ← 18-format data loader/saver
202
+ │ ├── math.py ← 25 analysis functions
203
+ │ ├── plotting.py ← 27 plot types (Matplotlib, Seaborn, Plotly)
204
+ │ ├── signal.py ← 16 signal processing functions
205
+ │ ├── peaks.py ← 5 peak analysis functions
206
+ │ ├── data_tools.py ← 12 non-destructive DataFrame operations
207
+ │ ├── annotations.py ← 7 Matplotlib overlay types
208
+ │ ├── spectroscopy.py ← 18 spectroscopy functions
209
+ │ ├── nist.py ← NIST WebBook integration
210
+ │ ├── batch.py ← 5 batch processing functions
211
+ │ ├── report.py ← PDF report generation
212
+ │ ├── plugin_loader.py ← plugin discovery and loading
213
+ │ ├── molecular/ ← CPK atom data + vibrational parsers
214
+ │ ├── pages/ ← 13 Streamlit pages (1_*.py – 13_*.py)
215
+ │ ├── utils/ ← session state, plot config, user settings
216
+ │ ├── assets/ ← logo + NCCU branding (shipped in the wheel)
217
+ │ ├── gallery/ ← pre-rendered gallery PNGs + manifest.json
218
+ │ └── example-data/Artificial/ ← built-in sample datasets
219
+ ├── tests/ ← pytest suite, 1,000+ tests
220
+ ├── plugins/ ← plugin_example.py starter template
221
+ ├── examples/ ← 15+ standalone scripts + batch_config.json
222
+ ├── docs/ ← tutorials, cheatsheet, site built by build_docs.py
223
+ ├── generate_gallery.py ← regenerates eagleplot/gallery/
224
+ ├── requirements.txt
225
+ ├── pyproject.toml
226
+ ├── setup.bat / .command / .sh ← First-run setup (Windows / macOS / Linux)
227
+ └── launch.bat / .command / .sh ← App launcher (Windows / macOS / Linux)
228
+ ```
229
+
230
+ Runtime assets (`assets/`, `gallery/`, `example-data/`) live **inside** the package
231
+ rather than at the repository root, so they are present after `pip install`.
232
+
233
+ ## Documentation
234
+
235
+ - [Getting Started](docs/getting_started.md) — installation walkthrough and API examples
236
+ - [Cheatsheet](docs/cheatsheet.md) — quick reference for all plot functions
237
+ - [CLI Tutorial](docs/tutorials/cli_guide.md) — step-by-step guide to all 5 CLI commands
238
+ - [GUI Tutorial](docs/tutorials/gui_guide.md) — page-by-page walkthrough of the Streamlit app
239
+ - [Examples](examples/) — 15+ standalone runnable scripts covering all major workflows
240
+
241
+ ## About
242
+
243
+ **Author:** Jonathan D. Schultz, PhD — NCCU Department of Chemistry and Biochemistry
244
+ **Institution:** North Carolina Central University
245
+ **Use:** Research and teaching in computational science
246
+ **License:** See [LICENSE](LICENSE)