alexPlot
A simple plotting library for plotting zfit PDFs and datasets, this package contains functions useful for plotting in 1D. These plotting functions are built with matplotlib functions and make use of zfit.Space and zfit.pdf.SumPDF objects. By default asymmetric errors are applied and pulls are computed with PDF integrals. The libarary can be used with the only_canvas option to act like another normal matplotlib plotting function.
,ggggggggggg,
,dPYb, dP"""88""""""Y8,,dPYb, I8
IP'`Yb Yb, 88 `8bIP'`Yb I8
I8 8I `" 88 ,8PI8 8I 88888888
I8 8' 88aaaad8P" I8 8' I8
,gggg,gg I8 dP ,ggg, ,gg, ,gg88""""" I8 dP ,ggggg, I8
dP" "Y8I I8dP i8" "8i d8""8b,dP" 88 I8dP dP" "Y8gggI8
i8' ,8I I8P I8, ,8I dP ,88" 88 I8P i8' ,8I ,I8,
,d8, ,d8b,,d8b,_ `YbadP' ,dP ,dP"Y8, 88 ,d8b,_ ,d8, ,d8',d88b,
P"Y8888P"`Y88P'"Y88888P"Y8888" dP" "Y8 88 8P'"Y88P"Y8888P" 8P""Y8
Setting up
To install
pip install alexPlot
python -c 'import alexPlot; alexPlot.examples()'
or
git clone ssh://git@gitlab.cern.ch:7999/amarshal/alexPlot.git
pip install --no-dependencies -e .
python -c 'import alexPlot; alexPlot.examples()'
Then
import alexPlot
# to ask for help
alexPlot.help()
# to ask for examples
alexPlot.examples()
# to overwrite default options
alexPlot.options.estimate_pulls = False
Plotting data
import zfit
import numpy as np
import alexPlot
# plot using numpy array
data = np.random.normal(0,1,1000)
alexPlot.plot_data(data, figure_title='Numpy example')
# plot using a zfit dataset
obs = zfit.Space("x", limits=(-5, 5))
data = zfit.Data.from_numpy(obs=obs, array=data)
alexPlot.plot_data(data, also_plot_hist=True, color='tab:blue', figure_title='zfit example')
Plotting pdf
# Example with KDE
obs = zfit.Space("x", limits=(-5, 5))
data = np.random.normal(0,1,1000)
data = zfit.Data.from_numpy(obs=obs, array=data)
model_KDE = zfit.pdf.GaussianKDE1DimV1(obs=obs, data=data, bandwidth='silverman')
alexPlot.plot_pdf(model_KDE)
# Example with an exponential plus a Gaussian
obs = zfit.Space("x", limits=(0, 30))
mean = zfit.Parameter("mean", 17,)
sigma = zfit.Parameter("sigma", 2,)
model_Gauss = zfit.pdf.Gauss(mean, sigma, obs)
lam = zfit.Parameter("lam", -0.1)
model_Exp = zfit.pdf.Exponential(lam, obs)
frac = zfit.Parameter("frac", 0.2,)
total_model = zfit.pdf.SumPDF([model_Gauss,model_Exp], obs=obs, fracs=[frac])
alexPlot.plot_pdf(total_model)
Plotting data and pdf
# Example with KDE
alexPlot.plot_pdf_data(model_KDE, data, filename='examples/example_KDE_data.png', figure_title='KDE')
# Example with an exponential plus a Gaussian
alexPlot.plot_pdf_data(total_model, data)
Extra functionality
# Add weights
alexPlot.plot_pdf_data(total_model, data_np,
weights=np.abs(np.random.normal(0,1,np.shape(data_np))), stack=True)
# Highlight a signal peak and zoom in
alexPlot.plot_pdf_data(total_model, data_np, dash_signal=True, ymax=50)
# Add lables
alexPlot.plot_pdf_data(total_model, data,
dash_signal=True, label='Total PDF',
component_labels=['Signal', 'Background'],
xlabel=r'Some dimension (MeV/$c^2$)', units=r'MeV/$c^2$')
# Plot a log yscale
alexPlot.plot_pdf_data(total_model, data, log=True)
# Plot multiple datasets
data_A = np.random.normal(-1,1,1000)
data_B = np.random.normal(2,1,10000)
alexPlot.plot_data([data_A, data_B], color=['tab:blue','tab:red'], also_plot_hist=True, bins=35)
# Plot multiple datasets normalised
alexPlot.plot_data([data_A, data_B], label=['Dataset A', 'Dataset B'],
density=True, also_plot_hist=True, bins=35)
# Use custom pyplot commands
alexPlot.plot_pdf_data(total_model, data, log=True,
extra_pyplot_commands=["plt.axvline(x=15,c='k')"])
# Overlay custom pyplot objects
plt.figure(figsize=(13,10))
alexPlot.plot_pdf_data(total_model, data, only_canvas=True, stack=True,
component_colors=['tab:cyan','tab:grey'], color='r', pulls=False)
plt.axhline(y=10,c='r')
plt.savefig("examples/only_canvas.png")
plt.close("all")
# Use xlims
alexPlot.plot_pdf_data(total_model, data, stack=True, xmin=10, xmax=22,
component_colors=['tab:cyan','tab:grey'], color='r')
# Plot multiple PDFs at once (note stack only stacks PDFs within same SumPDF)
obs = zfit.Space("x", limits=(-5, 5))
data_np = np.random.normal(0,1,2500)
data = zfit.Data.from_numpy(obs=obs, array=data_np)
model_KDE_A = zfit.pdf.GaussianKDE1DimV1(obs=obs, data=data, bandwidth='silverman')
data = zfit.Data.from_numpy(obs=obs, array=data_np[:1250])
model_KDE_B = zfit.pdf.GaussianKDE1DimV1(obs=obs, data=data, bandwidth='silverman')
yield_A = zfit.Parameter("yield_A", 2500)
model_KDE_A.set_yield(yield_A)
yield_B = zfit.Parameter("yield_B", 1250)
model_KDE_B.set_yield(yield_B)
alexPlot.plot_pdf_data([model_KDE_A, model_KDE_B], data_np, color=["#ffb366",'b'], component_colors=[["#ffb366"],['b']], alpha=[1.,0.25], label=['plot_A', 'plot_B'], stack=True)
,ggggggggggg,
,dPYb, dP"""88""""""Y8,,dPYb, I8
IP'`Yb Yb, 88 `8bIP'`Yb I8
I8 8I `" 88 ,8PI8 8I 88888888
I8 8' 88aaaad8P" I8 8' I8
,gggg,gg I8 dP ,ggg, ,gg, ,gg88""""" I8 dP ,ggggg, I8
dP" "Y8I I8dP i8" "8i d8""8b,dP" 88 I8dP dP" "Y8gggI8
i8' ,8I I8P I8, ,8I dP ,88" 88 I8P i8' ,8I ,I8,
,d8, ,d8b,,d8b,_ `YbadP' ,dP ,dP"Y8, 88 ,d8b,_ ,d8, ,d8',d88b,
P"Y8888P"`Y88P'"Y88888P"Y8888" dP" "Y8 88 8P'"Y88P"Y8888P" 8P""Y8
test
Metadata
Release files for alexPlot 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| alexplot-1.0.2.tar.gz | 17.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| alexplot-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.9 kB
Release files / alexplot-1.0.2.tar.gz
| Download URL | alexplot-1.0.2.tar.gz |
|---|---|
| Size | 17.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
28e9a7a9a0d81abf5ef2abb1cf2e42721abcd7ae83930fb4e3e31100c3a5e386
|
|
BLAKE2b-256 checksum How to use checksums |
32756321ff32e0dea8eb556d4972756cfa9024c71edf9d9fcbc6085fc58c427e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.21
|
Release files / alexplot-1.0.2-py3-none-any.whl
| Download URL | alexplot-1.0.2-py3-none-any.whl |
|---|---|
| Size | 17.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
12419f02ce3554e0fae42ec3a3859f4b53a0aebdc871adc8573a803e04e5087f
|
|
BLAKE2b-256 checksum How to use checksums |
908e5bc731b688132a84496ac70d415ab13df6c85b22381d5ccee917613042b8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.21
|