Hist is a analyst friendly front-end for boost-histogram, designed for Python 3.7+ (3.6 users get version 2.3). See what's new.
You can install this library from PyPI with pip:
python3 -m pip install "hist[plot]"
If you do not need the plotting features, you can skip the [plot]
extra.
Hist currently provides everything boost-histogram provides, and the following enhancements:
-
Hist augments axes with names:
name=
is a unique label describing each axislabel=
is an optional string that is used in plotting (defaults toname
if not provided)- Indexing, projection, and more support named axes
- Experimental
NamedHist
is aHist
that disables most forms of positional access
-
The
Hist
class augmentsbh.Histogram
with reduced typing construction:- Optional import-free construction system
flow=False
is a fast way to turn off flow for the axes on construction- Storages can be given by string
storage=
can be omitteddata=
can initialize a histogram with existing dataHist.from_columns
can be used to initialize with a DataFrame or dict
-
Hist implements UHI+; an extension to the UHI (Unified Histogram Indexing) system designed for import-free interactivity:
- Uses
j
suffix to switch to data coordinates in access or slices - Uses
j
suffix on slices to rebin - Strings can be used directly to index into string category axes
- Uses
-
Quick plotting routines encourage exploration:
.plot()
provides 1D and 2D plots (or useplot1d()
,plot2d()
).plot2d_full()
shows 1D projects around a 2D plot.plot_ratio(...)
make a ratio plot between the histogram and another histogram or callable.plot_pull(...)
performs a pull plot.plot_pie()
makes a pie plot.show()
provides a nice str printout using Histoprint
-
Extended Histogram features:
.density()
computes the density as an array.profile(remove_ax)
can convert a ND COUNT histogram into a (N-1)D MEAN histogram
-
New modules
intervals
supports frequentist coverage intervals
-
Notebook ready: Hist has gorgeous in-notebook representation.
- No dependencies required
from hist import Hist
# Quick construction, no other imports needed:
h = (
Hist.new
.Reg(10, 0 ,1, name="x", label="x-axis")
.Var(range(10), name="y", label="y-axis")
.Int64()
)
# Filling by names is allowed:
h.fill(y=[1, 4, 6], x=[3, 5, 2])
# Names can be used to manipulate the histogram:
h.project("x")
h[{"y": 0.5j + 3, "x": 5j}]
# You can access data coordinates or rebin with a `j` suffix:
h[.3j:, ::2j] # x from .3 to the end, y is rebinned by 2
# Elegant plotting functions:
h.plot()
h.plot2d_full()
h.plot_pull(Callable)
From a git checkout, run:
python -m pip install -e .[dev]
See CONTRIBUTING.md for information on setting up a development environment.
We would like to acknowledge the contributors that made this project possible (emoji key):
Henry Schreiner 🚧 💻 📖 |
Nino Lau 🚧 💻 📖 |
Chris Burr 💻 |
Nick Amin 💻 |
Eduardo Rodrigues 💻 |
Andrzej Novak 💻 |
Matthew Feickert 💻 |
This project follows the all-contributors specification.
This library was primarily developed by Henry Schreiner and Nino Lau.
Support for this work was provided by the National Science Foundation cooperative agreement OAC-1836650 (IRIS-HEP) and OAC-1450377 (DIANA/HEP). Any opinions, findings, conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the National Science Foundation.