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