plothist 1.3.2__py3-none-any.whl → 1.5.0__py3-none-any.whl
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.
- plothist/__init__.py +66 -74
- plothist/_version.py +21 -0
- plothist/_version.pyi +2 -0
- plothist/comparison.py +115 -106
- plothist/examples/1d_hist/1d_comparison_asymmetry.py +37 -0
- plothist/examples/1d_hist/1d_comparison_difference.py +40 -0
- plothist/examples/1d_hist/1d_comparison_efficiency.py +37 -0
- plothist/examples/1d_hist/1d_comparison_only_efficiency.py +33 -0
- plothist/examples/1d_hist/1d_comparison_pull.py +37 -0
- plothist/examples/1d_hist/1d_comparison_ratio.py +37 -0
- plothist/examples/1d_hist/1d_comparison_relative_difference.py +37 -0
- plothist/examples/1d_hist/1d_comparison_split_ratio.py +37 -0
- plothist/examples/1d_hist/1d_elt1.py +38 -0
- plothist/examples/1d_hist/1d_elt1_stacked.py +45 -0
- plothist/examples/1d_hist/1d_elt2.py +33 -0
- plothist/examples/1d_hist/1d_hist_simple.py +28 -0
- plothist/examples/1d_hist/1d_int_category.py +41 -0
- plothist/examples/1d_hist/1d_profile.py +33 -0
- plothist/examples/1d_hist/1d_side_by_side.py +58 -0
- plothist/examples/1d_hist/1d_str_category.py +41 -0
- plothist/examples/1d_hist/README.rst +4 -0
- plothist/examples/2d_hist/2d_hist_correlations.py +65 -0
- plothist/examples/2d_hist/2d_hist_simple.py +28 -0
- plothist/examples/2d_hist/2d_hist_simple_discrete_colormap.py +42 -0
- plothist/examples/2d_hist/2d_hist_uneven.py +28 -0
- plothist/examples/2d_hist/2d_hist_with_projections.py +36 -0
- plothist/examples/2d_hist/README.rst +4 -0
- plothist/examples/README.rst +7 -0
- plothist/examples/advanced/1d_comparison_advanced.py +87 -0
- plothist/examples/advanced/1d_side_by_side_with_numbers.py +81 -0
- plothist/examples/advanced/README.rst +4 -0
- plothist/examples/advanced/asymmetry_comparison_advanced.py +133 -0
- plothist/examples/advanced/model_examples_flatten2D.py +86 -0
- plothist/examples/func_1d/README.rst +4 -0
- plothist/examples/func_1d/fct_1d.py +27 -0
- plothist/examples/func_1d/fct_1d_stacked.py +42 -0
- plothist/examples/model_ex/README.rst +4 -0
- plothist/examples/model_ex/model_all_comparisons.py +103 -0
- plothist/examples/model_ex/model_all_comparisons_no_model_unc.py +115 -0
- plothist/examples/model_ex/model_examples_pull.py +56 -0
- plothist/examples/model_ex/model_examples_pull_no_model_unc.py +59 -0
- plothist/examples/model_ex/model_examples_stacked.py +74 -0
- plothist/examples/model_ex/model_examples_stacked_unstacked.py +60 -0
- plothist/examples/model_ex/model_examples_unstacked.py +57 -0
- plothist/examples/model_ex/model_with_stacked_and_unstacked_function_components.py +50 -0
- plothist/examples/model_ex/model_with_stacked_and_unstacked_histograms_components.py +69 -0
- plothist/examples/model_ex/ratio_data_vs_model_with_stacked_and_unstacked_function_components.py +61 -0
- plothist/examples/utility/README.rst +4 -0
- plothist/examples/utility/add_text_example.py +39 -0
- plothist/examples/utility/color_palette_hists.py +94 -0
- plothist/examples/utility/color_palette_squares.py +100 -0
- plothist/examples/utility/matplotlib_vs_plothist_style.py +63 -0
- plothist/histogramming.py +77 -48
- plothist/plothist_style.py +61 -62
- plothist/plotters.py +280 -233
- plothist/test_helpers.py +43 -0
- plothist/variable_registry.py +62 -43
- {plothist-1.3.2.dist-info → plothist-1.5.0.dist-info}/METADATA +20 -12
- plothist-1.5.0.dist-info/RECORD +63 -0
- {plothist-1.3.2.dist-info → plothist-1.5.0.dist-info}/licenses/LICENSE +1 -1
- plothist/dummy_data.csv +0 -100001
- plothist/get_dummy_data.py +0 -17
- plothist/scripts/__init__.py +0 -2
- plothist/scripts/install_latin_modern_fonts.py +0 -145
- plothist/scripts/make_examples.py +0 -210
- plothist-1.3.2.dist-info/RECORD +0 -18
- plothist-1.3.2.dist-info/entry_points.txt +0 -3
- {plothist-1.3.2.dist-info → plothist-1.5.0.dist-info}/WHEEL +0 -0
- {plothist-1.3.2.dist-info → plothist-1.5.0.dist-info}/licenses/AUTHORS.md +0 -0
plothist/test_helpers.py
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import runpy
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import matplotlib.figure
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def run_script_and_get_object(script_path_str: str, name: str) -> Any | None:
|
|
11
|
+
"""
|
|
12
|
+
Runs a Python script from a given file path, temporarily disables saving of matplotlib figures
|
|
13
|
+
to suppress file output, and retrieves a variable from the script's global namespace by name.
|
|
14
|
+
The retrieved variable can be of any type.
|
|
15
|
+
|
|
16
|
+
Typically used with name="fig" to get the figure object created in the script.
|
|
17
|
+
|
|
18
|
+
Parameters:
|
|
19
|
+
script_path_str (str): Path to the Python script file to execute.
|
|
20
|
+
name (str): Name of the variable in the script's global namespace to retrieve.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
Any or None: The specified variable from the script's global namespace if present;
|
|
24
|
+
otherwise, None.
|
|
25
|
+
"""
|
|
26
|
+
script_path = Path(script_path_str).resolve()
|
|
27
|
+
|
|
28
|
+
if not script_path.is_file():
|
|
29
|
+
raise FileNotFoundError(f"Script file not found: {script_path_str}")
|
|
30
|
+
|
|
31
|
+
original_savefig = matplotlib.figure.Figure.savefig
|
|
32
|
+
|
|
33
|
+
def suppressed_savefig(*args, **kwargs):
|
|
34
|
+
pass
|
|
35
|
+
|
|
36
|
+
matplotlib.figure.Figure.savefig = suppressed_savefig
|
|
37
|
+
|
|
38
|
+
try:
|
|
39
|
+
globals_dict = runpy.run_path(str(script_path))
|
|
40
|
+
finally:
|
|
41
|
+
matplotlib.figure.Figure.savefig = original_savefig
|
|
42
|
+
|
|
43
|
+
return globals_dict.get(name)
|
plothist/variable_registry.py
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
"""
|
|
3
2
|
Collection of functions to manage the variable registry
|
|
4
3
|
"""
|
|
5
|
-
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
6
7
|
import os
|
|
7
8
|
import warnings
|
|
9
|
+
|
|
8
10
|
import boost_histogram as bh
|
|
11
|
+
import yaml
|
|
12
|
+
|
|
9
13
|
from plothist.histogramming import create_axis
|
|
10
14
|
|
|
11
15
|
|
|
12
|
-
def _check_if_variable_registry_exists(path):
|
|
16
|
+
def _check_if_variable_registry_exists(path: str) -> None:
|
|
13
17
|
"""
|
|
14
18
|
Check if the variable registry file exists at the specified path.
|
|
15
19
|
|
|
@@ -27,18 +31,19 @@ def _check_if_variable_registry_exists(path):
|
|
|
27
31
|
RuntimeError
|
|
28
32
|
If the variable registry file does not exist.
|
|
29
33
|
"""
|
|
30
|
-
if not os.path.exists(path):
|
|
31
|
-
|
|
32
|
-
raise RuntimeError("Did you forgot to run create_variable_registry()?")
|
|
34
|
+
if not os.path.exists(path) and path == "./variable_registry.yaml":
|
|
35
|
+
raise RuntimeError("Did you forget to run create_variable_registry()?")
|
|
33
36
|
|
|
34
37
|
|
|
35
|
-
def _save_variable_registry(
|
|
38
|
+
def _save_variable_registry(
|
|
39
|
+
variable_registry: dict[str, dict], path: str = "./variable_registry.yaml"
|
|
40
|
+
) -> None:
|
|
36
41
|
"""
|
|
37
42
|
Save the variable registry to a yaml file.
|
|
38
43
|
|
|
39
44
|
Parameters
|
|
40
45
|
----------
|
|
41
|
-
variable_registry : dict
|
|
46
|
+
variable_registry : dict[str, dict]
|
|
42
47
|
The variable registry to save.
|
|
43
48
|
path : str, optional
|
|
44
49
|
The path to the variable registry file (default is "./variable_registry.yaml").
|
|
@@ -55,8 +60,11 @@ def _save_variable_registry(variable_registry, path="./variable_registry.yaml"):
|
|
|
55
60
|
|
|
56
61
|
|
|
57
62
|
def create_variable_registry(
|
|
58
|
-
variable_keys
|
|
59
|
-
|
|
63
|
+
variable_keys: list[str],
|
|
64
|
+
path: str = "./variable_registry.yaml",
|
|
65
|
+
custom_dict: dict | None = None,
|
|
66
|
+
reset: bool = False,
|
|
67
|
+
) -> None:
|
|
60
68
|
"""
|
|
61
69
|
Create the variable registry yaml file given a list of variable keys.
|
|
62
70
|
It stores all the plotting information for each variable.
|
|
@@ -73,7 +81,7 @@ def create_variable_registry(
|
|
|
73
81
|
variable name in data.
|
|
74
82
|
bins : int
|
|
75
83
|
Number of bins, default is 50.
|
|
76
|
-
range:
|
|
84
|
+
range: tuple[float, float]
|
|
77
85
|
Range of the variables, default is [min, max] of the data.
|
|
78
86
|
label : str
|
|
79
87
|
Label to display, default is variable name. Latex supported by surrounding the label with $label$.
|
|
@@ -90,7 +98,7 @@ def create_variable_registry(
|
|
|
90
98
|
|
|
91
99
|
Parameters
|
|
92
100
|
----------
|
|
93
|
-
variable_keys : list
|
|
101
|
+
variable_keys : list[str]
|
|
94
102
|
A list of variable keys to be registered.
|
|
95
103
|
path : str, optional
|
|
96
104
|
The path to the variable registry file (default is "./variable_registry.yaml").
|
|
@@ -98,21 +106,19 @@ def create_variable_registry(
|
|
|
98
106
|
A dictionary containing the plotting information for the variables. Default dictionary is the one described above.
|
|
99
107
|
reset : bool, optional
|
|
100
108
|
If True, the registry will be reset to default values for all variable keys (default is False).
|
|
101
|
-
|
|
102
|
-
|
|
103
109
|
"""
|
|
104
110
|
|
|
105
111
|
if not os.path.exists(path):
|
|
106
112
|
with open(path, "w") as f:
|
|
107
113
|
pass
|
|
108
114
|
|
|
109
|
-
with open(path
|
|
115
|
+
with open(path) as f:
|
|
110
116
|
variable_registry = yaml.safe_load(f)
|
|
111
117
|
if variable_registry is None:
|
|
112
118
|
variable_registry = {}
|
|
113
119
|
|
|
114
120
|
for variable_key in variable_keys:
|
|
115
|
-
if variable_key not in variable_registry
|
|
121
|
+
if variable_key not in variable_registry or reset:
|
|
116
122
|
if custom_dict is not None:
|
|
117
123
|
variable_registry.update({variable_key: custom_dict})
|
|
118
124
|
else:
|
|
@@ -121,7 +127,7 @@ def create_variable_registry(
|
|
|
121
127
|
variable_key: {
|
|
122
128
|
"name": variable_key,
|
|
123
129
|
"bins": 50,
|
|
124
|
-
"range":
|
|
130
|
+
"range": ("min", "max"),
|
|
125
131
|
"label": variable_key,
|
|
126
132
|
"log": False,
|
|
127
133
|
"legend_location": "best",
|
|
@@ -134,7 +140,9 @@ def create_variable_registry(
|
|
|
134
140
|
_save_variable_registry(variable_registry, path=path)
|
|
135
141
|
|
|
136
142
|
|
|
137
|
-
def get_variable_from_registry(
|
|
143
|
+
def get_variable_from_registry(
|
|
144
|
+
variable_key: str, path: str = "./variable_registry.yaml"
|
|
145
|
+
) -> dict:
|
|
138
146
|
"""
|
|
139
147
|
This function retrieves the parameter information for a variable from the variable registry file specified by the 'path' parameter.
|
|
140
148
|
It loads the variable registry file and returns the dictionary entry corresponding to the specified variable name.
|
|
@@ -158,14 +166,23 @@ def get_variable_from_registry(variable_key, path="./variable_registry.yaml"):
|
|
|
158
166
|
|
|
159
167
|
_check_if_variable_registry_exists(path)
|
|
160
168
|
|
|
161
|
-
with open(path
|
|
169
|
+
with open(path) as f:
|
|
162
170
|
variable_registry = yaml.safe_load(f)
|
|
171
|
+
if "range" in variable_registry[variable_key] and isinstance(
|
|
172
|
+
variable_registry[variable_key]["range"], list
|
|
173
|
+
):
|
|
174
|
+
variable_registry[variable_key]["range"] = tuple(
|
|
175
|
+
variable_registry[variable_key]["range"]
|
|
176
|
+
)
|
|
163
177
|
return variable_registry[variable_key]
|
|
164
178
|
|
|
165
179
|
|
|
166
180
|
def update_variable_registry(
|
|
167
|
-
dictionary
|
|
168
|
-
|
|
181
|
+
dictionary: dict,
|
|
182
|
+
variable_keys: list[str] | None = None,
|
|
183
|
+
path: str = "./variable_registry.yaml",
|
|
184
|
+
overwrite: bool = False,
|
|
185
|
+
) -> None:
|
|
169
186
|
"""
|
|
170
187
|
Update the variable registry file with a dictionary. Each key in the provided dictionary will be added as parameters for each variable. If they are already in the variable information, they will be updated with the new values only if the overwrite flag is True.
|
|
171
188
|
|
|
@@ -173,12 +190,12 @@ def update_variable_registry(
|
|
|
173
190
|
----------
|
|
174
191
|
dictionary : dict
|
|
175
192
|
A dictionary containing the information to update the registry with.
|
|
176
|
-
variable_keys : list
|
|
193
|
+
variable_keys : list[str]
|
|
177
194
|
A list of variable keys for which to update the registry. Default is None: all variables in the registry are updated.
|
|
178
195
|
path : str, optional
|
|
179
196
|
The path to the variable registry file (default is "./variable_registry.yaml").
|
|
180
197
|
overwrite : bool, optional
|
|
181
|
-
If True, the keys will be
|
|
198
|
+
If True, the keys will be overwritten by the provided value in the dictionary (default is False).
|
|
182
199
|
|
|
183
200
|
Returns
|
|
184
201
|
-------
|
|
@@ -186,7 +203,7 @@ def update_variable_registry(
|
|
|
186
203
|
"""
|
|
187
204
|
_check_if_variable_registry_exists(path)
|
|
188
205
|
|
|
189
|
-
with open(path
|
|
206
|
+
with open(path) as f:
|
|
190
207
|
variable_registry = yaml.safe_load(f)
|
|
191
208
|
|
|
192
209
|
if variable_keys is None:
|
|
@@ -194,23 +211,25 @@ def update_variable_registry(
|
|
|
194
211
|
|
|
195
212
|
for variable_key in variable_keys:
|
|
196
213
|
for key, value in dictionary.items():
|
|
197
|
-
if key not in variable_registry[variable_key]
|
|
214
|
+
if key not in variable_registry[variable_key] or overwrite:
|
|
198
215
|
variable_registry[variable_key].update({key: value})
|
|
199
216
|
|
|
200
217
|
_save_variable_registry(variable_registry, path=path)
|
|
201
218
|
|
|
202
219
|
|
|
203
220
|
def remove_variable_registry_parameters(
|
|
204
|
-
parameters
|
|
205
|
-
|
|
221
|
+
parameters: list[str],
|
|
222
|
+
variable_keys: list[str] | None = None,
|
|
223
|
+
path: str = "./variable_registry.yaml",
|
|
224
|
+
) -> None:
|
|
206
225
|
"""
|
|
207
226
|
Remove the specified parameters from the variable registry file.
|
|
208
227
|
|
|
209
228
|
Parameters
|
|
210
229
|
----------
|
|
211
|
-
parameters : list
|
|
230
|
+
parameters : list[str]
|
|
212
231
|
A list of parameters to remove from the variable keys.
|
|
213
|
-
variable_keys : list
|
|
232
|
+
variable_keys : list[str]
|
|
214
233
|
A list of variable keys for which to remove the specified parameters from the registry. Default is None: all variables in the registry are updated.
|
|
215
234
|
path : str, optional
|
|
216
235
|
The path to the variable registry file (default is "./variable_registry.yaml").
|
|
@@ -221,7 +240,7 @@ def remove_variable_registry_parameters(
|
|
|
221
240
|
"""
|
|
222
241
|
_check_if_variable_registry_exists(path)
|
|
223
242
|
|
|
224
|
-
with open(path
|
|
243
|
+
with open(path) as f:
|
|
225
244
|
variable_registry = yaml.safe_load(f)
|
|
226
245
|
|
|
227
246
|
if variable_keys is None:
|
|
@@ -229,7 +248,7 @@ def remove_variable_registry_parameters(
|
|
|
229
248
|
|
|
230
249
|
for variable_key in variable_keys:
|
|
231
250
|
for parameter in parameters:
|
|
232
|
-
if parameter in variable_registry[variable_key]
|
|
251
|
+
if parameter in variable_registry[variable_key]:
|
|
233
252
|
_ = variable_registry[variable_key].pop(parameter)
|
|
234
253
|
else:
|
|
235
254
|
warnings.warn(
|
|
@@ -242,10 +261,10 @@ def remove_variable_registry_parameters(
|
|
|
242
261
|
|
|
243
262
|
def update_variable_registry_ranges(
|
|
244
263
|
data,
|
|
245
|
-
variable_keys=None,
|
|
246
|
-
path="./variable_registry.yaml",
|
|
247
|
-
overwrite=False,
|
|
248
|
-
):
|
|
264
|
+
variable_keys: list[str] | None = None,
|
|
265
|
+
path: str = "./variable_registry.yaml",
|
|
266
|
+
overwrite: bool = False,
|
|
267
|
+
) -> None:
|
|
249
268
|
"""
|
|
250
269
|
Update the range parameters for multiple variables in the variable registry file.
|
|
251
270
|
|
|
@@ -253,12 +272,12 @@ def update_variable_registry_ranges(
|
|
|
253
272
|
----------
|
|
254
273
|
data : numpy.ndarray or pandas.DataFrame
|
|
255
274
|
A dataset containing the data for the variables.
|
|
256
|
-
variable_keys : list
|
|
275
|
+
variable_keys : list[str]
|
|
257
276
|
A list of variable keys for which to update the range parameters in the registry. The variable needs to have a bin and range properties in the registry. Default is None: all variables in the registry are updated.
|
|
258
277
|
path : str, optional
|
|
259
278
|
The path to the variable registry file (default is "./variable_registry.yaml").
|
|
260
279
|
overwrite : bool, optional
|
|
261
|
-
If True, the range parameters will be
|
|
280
|
+
If True, the range parameters will be overwritten even if it's not equal to ("min", "max") (default is False).
|
|
262
281
|
|
|
263
282
|
Returns
|
|
264
283
|
-------
|
|
@@ -272,24 +291,24 @@ def update_variable_registry_ranges(
|
|
|
272
291
|
_check_if_variable_registry_exists(path)
|
|
273
292
|
|
|
274
293
|
if variable_keys is None:
|
|
275
|
-
with open(path
|
|
294
|
+
with open(path) as f:
|
|
276
295
|
variable_registry = yaml.safe_load(f)
|
|
277
296
|
variable_keys = list(variable_registry.keys())
|
|
278
297
|
|
|
279
298
|
for variable_key in variable_keys:
|
|
280
299
|
variable = get_variable_from_registry(variable_key, path=path)
|
|
281
|
-
if not all(key in variable
|
|
300
|
+
if not all(key in variable for key in ["bins", "range", "name"]):
|
|
282
301
|
raise RuntimeError(
|
|
283
302
|
f"Variable {variable_key} does not have a name, bins or range property in the registry {path}."
|
|
284
303
|
)
|
|
285
304
|
|
|
286
|
-
range =
|
|
305
|
+
range = ("min", "max") if overwrite else variable["range"]
|
|
287
306
|
|
|
288
|
-
if range ==
|
|
289
|
-
axis = create_axis(variable["bins"], range, data[variable["name"]])
|
|
307
|
+
if tuple(range) == ("min", "max"):
|
|
308
|
+
axis = create_axis(variable["bins"], tuple(range), data[variable["name"]])
|
|
290
309
|
if isinstance(axis, bh.axis.Regular):
|
|
291
310
|
update_variable_registry(
|
|
292
|
-
{"range":
|
|
311
|
+
{"range": (float(axis.edges[0]), float(axis.edges[-1]))},
|
|
293
312
|
[variable_key],
|
|
294
313
|
path=path,
|
|
295
314
|
overwrite=True,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plothist
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.0
|
|
4
4
|
Summary: Plot histograms in a scalable way and a beautiful style.
|
|
5
5
|
Project-URL: Homepage, https://github.com/cyrraz/plothist
|
|
6
6
|
Project-URL: Documentation, https://plothist.readthedocs.io/
|
|
@@ -19,13 +19,10 @@ Requires-Python: >=3.9
|
|
|
19
19
|
Requires-Dist: boost-histogram>=1.4.0
|
|
20
20
|
Requires-Dist: matplotlib>=3.0
|
|
21
21
|
Requires-Dist: numpy>=1.14.5
|
|
22
|
+
Requires-Dist: plothist-utils>=0.0.1
|
|
22
23
|
Requires-Dist: pyyaml>=5.3.1
|
|
23
24
|
Requires-Dist: requests>=2.25.0
|
|
24
25
|
Requires-Dist: scipy>=1.6.0
|
|
25
|
-
Provides-Extra: dev
|
|
26
|
-
Requires-Dist: pre-commit>=4.1.0; extra == 'dev'
|
|
27
|
-
Provides-Extra: test
|
|
28
|
-
Requires-Dist: pytest>=8.3.5; extra == 'test'
|
|
29
26
|
Description-Content-Type: text/x-rst
|
|
30
27
|
|
|
31
28
|
|
|
@@ -49,8 +46,11 @@ plothist
|
|
|
49
46
|
:width: 320
|
|
50
47
|
|
|
51
48
|
|
|
52
|
-
|GitHub Project| |PyPI version| |Docs from main| |Discussion| |DOI| |
|
|
49
|
+
|GitHub Project| |PyPI version| |Docs from main| |Discussion| |DOI| |Linter|
|
|
53
50
|
|
|
51
|
+
|GitHub Actions Status: CI| |GitHub Actions Status: CD| |pre-commit.ci Status| |Code Coverage|
|
|
52
|
+
|
|
53
|
+
This package is a wrapper around `matplotlib <https://matplotlib.org/>`_.
|
|
54
54
|
|
|
55
55
|
**Advantages of the package**: scalability, style and user-friendly way of managing variables and a stunning `example gallery <https://plothist.readthedocs.io/en/latest/example_gallery/>`_.
|
|
56
56
|
|
|
@@ -73,13 +73,21 @@ plothist
|
|
|
73
73
|
|
|
74
74
|
.. |GitHub Project| image:: https://img.shields.io/badge/GitHub--blue?style=social&logo=GitHub
|
|
75
75
|
:target: https://github.com/cyrraz/plothist
|
|
76
|
-
.. |PyPI version| image:: https://badge.fury.io/py/plothist.svg
|
|
76
|
+
.. |PyPI version| image:: https://badge.fury.io/py/plothist.svg?style=flat-square
|
|
77
77
|
:target: https://badge.fury.io/py/plothist
|
|
78
|
-
.. |Docs from main| image:: https://img.shields.io/badge/docs-main-blue.svg
|
|
78
|
+
.. |Docs from main| image:: https://img.shields.io/badge/docs-main-blue.svg?style=platic
|
|
79
79
|
:target: https://plothist.readthedocs.io/en/main/
|
|
80
|
-
.. |Discussion| image:: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github
|
|
80
|
+
.. |Discussion| image:: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github?style=flat-square
|
|
81
81
|
:target: https://github.com/cyrraz/plothist/discussions
|
|
82
|
-
.. |DOI| image:: https://zenodo.org/badge/647069945.svg
|
|
82
|
+
.. |DOI| image:: https://zenodo.org/badge/647069945.svg?style=flat-square
|
|
83
83
|
:target: https://zenodo.org/doi/10.5281/zenodo.10995667
|
|
84
|
-
.. |
|
|
85
|
-
:target: https://github.com/
|
|
84
|
+
.. |Linter| image:: https://img.shields.io/badge/Linter-Ruff-brightgreen?style=platic
|
|
85
|
+
:target: https://github.com/charliermarsh/ruff
|
|
86
|
+
.. |GitHub Actions Status: CI| image:: https://github.com/cyrraz/plothist/actions/workflows/ci.yaml/badge.svg?style=flat-square
|
|
87
|
+
:target: https://github.com/cyrraz/plothist/actions/workflows/ci.yaml?query=branch%3Amain
|
|
88
|
+
.. |GitHub Actions Status: CD| image:: https://github.com/cyrraz/plothist/actions/workflows/cd.yaml/badge.svg?style=flat-square
|
|
89
|
+
:target: https://github.com/cyrraz/plothist/actions/workflows/cd.yaml?query=branch%3Amain
|
|
90
|
+
.. |pre-commit.ci Status| image:: https://results.pre-commit.ci/badge/github/cyrraz/plothist/main.svg?style=flat-square
|
|
91
|
+
:target: https://results.pre-commit.ci/latest/github/cyrraz/plothist/main
|
|
92
|
+
.. |Code Coverage| image:: https://codecov.io/gh/cyrraz/plothist/branch/main/graph/badge.svg?style=flat-square
|
|
93
|
+
:target: https://codecov.io/gh/cyrraz/plothist
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
plothist/__init__.py,sha256=00yQZBIlyvZxdimTgPMHK_ZH5pNVadyi-fu6ezuXRQs,2760
|
|
2
|
+
plothist/_version.py,sha256=qEW4HoWHYDkBguijNs9nZzHd38qlKSeRTDG2QQbYrGY,511
|
|
3
|
+
plothist/_version.pyi,sha256=o7uNL6MhuJoiqpEnriU7rBT6TmkJZA-i2qMoNz9YcgQ,82
|
|
4
|
+
plothist/comparison.py,sha256=Lk5bTMHe93C_0eOfUJQaY8lHxykJIQBWMDDt-iOmR-E,17935
|
|
5
|
+
plothist/default_style.mplstyle,sha256=7MmB2uiXmD_DSqFHeH1xxC-lTctBD_EASxMdSOsPep0,1574
|
|
6
|
+
plothist/histogramming.py,sha256=o0RLdoEhxHA7Ws0bvK3DewsbQEu-QOtJNw5Md5AckHM,11474
|
|
7
|
+
plothist/plothist_style.py,sha256=oPGt61GT6Hs_m6jRNlNDGCH1-5AJuMMUi7guw1vTGVo,13215
|
|
8
|
+
plothist/plotters.py,sha256=hjoDKVTYfRXI1m0GxlkfPc2LnpQWH1aYC8GnsYEak9k,46296
|
|
9
|
+
plothist/test_helpers.py,sha256=JXhxUdqMszkawxkU8cDPqipkSXNHfsKSfe3K-4frDrM,1379
|
|
10
|
+
plothist/variable_registry.py,sha256=usVLoDLbIMzjeRDazIH0OIjQIUsh9RSJ9Ncnhn1V9qw,10783
|
|
11
|
+
plothist/examples/README.rst,sha256=PVzkOQzVnNeWORxEv3NNv5XoSN2Y71D7SYzRkCqirfA,151
|
|
12
|
+
plothist/examples/1d_hist/1d_comparison_asymmetry.py,sha256=Rp9gv6E5z9KgIhnraS9AjGSMgHLhSHd_u5L-vG0w-gU,757
|
|
13
|
+
plothist/examples/1d_hist/1d_comparison_difference.py,sha256=FMKoTjMIQp6VsFXspVBy2AdxHPDnxhMfj9PCvE4qVjk,877
|
|
14
|
+
plothist/examples/1d_hist/1d_comparison_efficiency.py,sha256=qYf8a5-IGN-n6T_EIcyyoytgmefi3k3FjxNh3oPNE1M,851
|
|
15
|
+
plothist/examples/1d_hist/1d_comparison_only_efficiency.py,sha256=fjCfBfOl7exbtQGVvGXwAv7pQC_t_NEG7mebjobQiDs,687
|
|
16
|
+
plothist/examples/1d_hist/1d_comparison_pull.py,sha256=JC9Mxy1nQcLwcgogxjp3NSsoeORrvQ51ESmFWwhsIZQ,689
|
|
17
|
+
plothist/examples/1d_hist/1d_comparison_ratio.py,sha256=G7jmSenqNBtFxLSizwjNtqzjw3zqlEmp4vccbFfOfRE,685
|
|
18
|
+
plothist/examples/1d_hist/1d_comparison_relative_difference.py,sha256=APS8Zgb-xBLcQcJcfGatAU50pyB1iywlWsly3l1-prk,793
|
|
19
|
+
plothist/examples/1d_hist/1d_comparison_split_ratio.py,sha256=l5f-N7Bn6pL5xt3ZpHWfAXHMmOEK_DZBKVll_ALZYnY,771
|
|
20
|
+
plothist/examples/1d_hist/1d_elt1.py,sha256=ArSpYSlaTi6jqYL2Od9CQxFqqSkgFFoogqBXN0OcL6c,784
|
|
21
|
+
plothist/examples/1d_hist/1d_elt1_stacked.py,sha256=bogh66gUdf14xYv9Z9cs7WBNp_7HJbdcgSTVknckHXM,786
|
|
22
|
+
plothist/examples/1d_hist/1d_elt2.py,sha256=OJDMsf4H_fJuB_wXbTb04DCGP1cftpmBl-0Fw_EphwA,597
|
|
23
|
+
plothist/examples/1d_hist/1d_hist_simple.py,sha256=bDe1q1h1dnY_Cx5A4TvoYInR8DHb9JBosdOwG2Z56uk,412
|
|
24
|
+
plothist/examples/1d_hist/1d_int_category.py,sha256=mb4Eq3Of_vPJVMPPwYYDzT5gwrwpboexpjJU8gt1d8o,881
|
|
25
|
+
plothist/examples/1d_hist/1d_profile.py,sha256=otmerm64DNAYnRWaablQkQDgUVOvjLNDc6WhdghgZm8,685
|
|
26
|
+
plothist/examples/1d_hist/1d_side_by_side.py,sha256=sAHhBVnopINQscFaUpVI4KNs18e_1laHyrYBOlmU_fQ,1557
|
|
27
|
+
plothist/examples/1d_hist/1d_str_category.py,sha256=2DtxfNMAlcZ6pYx44lP0-sgY4M73-R0aBH61uEJmKA0,880
|
|
28
|
+
plothist/examples/1d_hist/README.rst,sha256=GT4-w9W-TDtjOqibOPcd6vYzAGO8bDsgxBRp3fD1uTw,100
|
|
29
|
+
plothist/examples/2d_hist/2d_hist_correlations.py,sha256=OroqVDKjNlAiMVXZ1AvFarV3qESiFkL0dnnb_NFkI70,1834
|
|
30
|
+
plothist/examples/2d_hist/2d_hist_simple.py,sha256=1n5yqOJxHzD31njOk85dTjuXhkogCDIS4-EG63XcnQ0,521
|
|
31
|
+
plothist/examples/2d_hist/2d_hist_simple_discrete_colormap.py,sha256=E1zeMIDP25R_ppkB-wDz7TxaLsxf7dCs87FrPTPWTAc,1000
|
|
32
|
+
plothist/examples/2d_hist/2d_hist_uneven.py,sha256=kR53XrSx38efG1wHEI69BIcPKVQzJygkr7ax_CFzBIA,646
|
|
33
|
+
plothist/examples/2d_hist/2d_hist_with_projections.py,sha256=EPGNoXQu7Oa0xS_fDc21_0dCVPLeKpSyv3dylfwXIDs,725
|
|
34
|
+
plothist/examples/2d_hist/README.rst,sha256=SCD39UgHb8vat63gNkOlDWPjwZj9INUS516D5DxW0Vk,116
|
|
35
|
+
plothist/examples/advanced/1d_comparison_advanced.py,sha256=RHWejmv8OQcgZ2R9yfAehv8cc8vQ5qr5gcVApGWdQhI,2668
|
|
36
|
+
plothist/examples/advanced/1d_side_by_side_with_numbers.py,sha256=46k1RXFPQ9x2yfeWQdAh5sz4I9C0SnYtQgqeL29_oQY,2437
|
|
37
|
+
plothist/examples/advanced/README.rst,sha256=ulygCIs7LUaViLpeTCIG2qcG9FEohccrlR2nXYLnkO4,112
|
|
38
|
+
plothist/examples/advanced/asymmetry_comparison_advanced.py,sha256=fteFmenSzhhZxgz4OU3fL8ejZKGnGpbNz-Zmt4M6g2c,2670
|
|
39
|
+
plothist/examples/advanced/model_examples_flatten2D.py,sha256=b4Rl6ItrsaddVL5uC9Gr3ccgSyhjW1RAtxSQgcCs_JA,2233
|
|
40
|
+
plothist/examples/func_1d/README.rst,sha256=tez3Jpva9yv7T7bDfXE9dCdmThJ1ALZRiEHOfFkrCNk,108
|
|
41
|
+
plothist/examples/func_1d/fct_1d.py,sha256=DRbKnImIqVYVXqH79X54YnxyGLu914fEmxry3fLBDsM,455
|
|
42
|
+
plothist/examples/func_1d/fct_1d_stacked.py,sha256=2PzLk3Os5firowyaEFoJrCrTewuRhQ2gXp7dTtKEFVM,655
|
|
43
|
+
plothist/examples/model_ex/README.rst,sha256=EDOiF2e_YeTg9I57yLmaGwzN0ZiO5c7n4bIWgqznKe0,103
|
|
44
|
+
plothist/examples/model_ex/model_all_comparisons.py,sha256=2DcF8axBgwD8lC4DkytWnNlFNsiEs7CuiP-9zxcPEV4,2555
|
|
45
|
+
plothist/examples/model_ex/model_all_comparisons_no_model_unc.py,sha256=xj1ByCadvlES2lYGfQkfYAcQSEGTSuWUBg6OGs8AN4s,3163
|
|
46
|
+
plothist/examples/model_ex/model_examples_pull.py,sha256=yesH6fYp5PfbfoHifRKt9EKo1AdrC0_cTAaSfRvUbgI,1462
|
|
47
|
+
plothist/examples/model_ex/model_examples_pull_no_model_unc.py,sha256=FXt25ObeeC3hdshpLTE6Bc-A1wAvIHPBUmIMPvC0g9k,1687
|
|
48
|
+
plothist/examples/model_ex/model_examples_stacked.py,sha256=cXuIwf1sNGiJ_XWj-yNIxFNzJ_5amnNUB7TYKvBcPVo,1994
|
|
49
|
+
plothist/examples/model_ex/model_examples_stacked_unstacked.py,sha256=geL-d997z7FyCLsDS6gGfkrGlGczLCv11QGhgvsH-U4,1792
|
|
50
|
+
plothist/examples/model_ex/model_examples_unstacked.py,sha256=jqwzfZLn2-I88NZ7BTaKjdNTdekP1i-jQXBPICyoPPA,1574
|
|
51
|
+
plothist/examples/model_ex/model_with_stacked_and_unstacked_function_components.py,sha256=KlISHHH3ASn4WS64yJ1ifdJIZX0RLBRUPUBJ5dEqvAM,1221
|
|
52
|
+
plothist/examples/model_ex/model_with_stacked_and_unstacked_histograms_components.py,sha256=fR7q5vDKG66-nAtjAiHFwQ2D10s-8GTK6IJ2HKtFFoQ,1966
|
|
53
|
+
plothist/examples/model_ex/ratio_data_vs_model_with_stacked_and_unstacked_function_components.py,sha256=HSrIs6XCiGgQCaMG9iG9vWe2491hb5hOoYyzJvrJL2Q,1367
|
|
54
|
+
plothist/examples/utility/README.rst,sha256=8qQeSXjzdPDlp58cbaHnAq5O55BSp8V-Umr9wmouwJ8,77
|
|
55
|
+
plothist/examples/utility/add_text_example.py,sha256=EB7ZUStt2E8GawjWNmVbSV34NINZ8v-4-rQBw1_gFD4,811
|
|
56
|
+
plothist/examples/utility/color_palette_hists.py,sha256=uIc6TrmjTj8EUif1Yj1wq4nXoY1sgJpS15yPe3-FpTw,2383
|
|
57
|
+
plothist/examples/utility/color_palette_squares.py,sha256=pNasgvZZApu-sCqhi5FTJAH3l6Px2cgB5RwJcQ1eF1U,2689
|
|
58
|
+
plothist/examples/utility/matplotlib_vs_plothist_style.py,sha256=iEIfbFKmAN-PcDCzw_sBuhrfpes4I2wUVfC0r1vUHEw,2006
|
|
59
|
+
plothist-1.5.0.dist-info/METADATA,sha256=0km7Qp4BxeY3aBXgC7EdkIShgSlNVo6yOnR6ehC16a0,4737
|
|
60
|
+
plothist-1.5.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
61
|
+
plothist-1.5.0.dist-info/licenses/AUTHORS.md,sha256=02x3_8PNyTsXcRs0IlJeCTOmpGNRqymcJ71-2QtR37E,111
|
|
62
|
+
plothist-1.5.0.dist-info/licenses/LICENSE,sha256=bfaEdGehofQDaw-zDdVMHNUKo1FrOm6oGUEF-ltrp6w,1523
|
|
63
|
+
plothist-1.5.0.dist-info/RECORD,,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
BSD 3-Clause License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2023-
|
|
3
|
+
Copyright (c) 2023-2025, Cyrille Praz, Tristan Fillinger
|
|
4
4
|
|
|
5
5
|
Redistribution and use in source and binary forms, with or without
|
|
6
6
|
modification, are permitted provided that the following conditions are met:
|