Skip to main content
Join the official 2020 Python Developers SurveyStart the survey!

Hist classes and utilities

Project description


Github Actions badge Join the chat at Code style: black DOI Scikit-HEP

Hist is a analyst friendly front-end for boost-histogram, designed for Python 3.6+.


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 axis.
    • label= is an optional string that is used in plotting (defaults to name if not provided).
    • Indexing, projection, and more support named axes.
    • Experimental NamedHist is a Hist that disables most forms of positional access.
  • The Hist class augments bh.Histogram with reduced typing construction:

    • Optional import-free construction system
    • flow=False is a fast way to turn off flow
  • 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
  • Quick plotting routines encourage exploration:

    • .plot() provides 1D and 2D plots
    • .plot2d_full() shows 1D projects around a 2D plot
    • .plot_pull(...) performs a pull plot
  • Notebook ready: Hist has gorgeous in-notebook representation.

    • No dependencies required


from hist import Hist

# Quick construction, no other imports needed:
h = (
  .Reg(10, 0 ,1, name="x", label="x-axis")
  .Variable(range(10), name="y", label="y-axis")

# Filling by names is allowed:
hist.fill(y=[1, 4, 6], x=[3, 5, 2])

# Names can be used to manipulate the histogram:
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:


From a git checkout, run:

python -m pip install -e .[dev]

See for information on setting up a development environment.


We would like to acknowledge the contributors that made this project possible (emoji key):

Henry Schreiner

🚧 💻 📖


🚧 💻 📖

Chris Burr


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.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for hist, version 2.0.1
Filename, size File type Python version Upload date Hashes
Filename, size hist-2.0.1-py3-none-any.whl (20.6 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size hist-2.0.1.tar.gz (345.8 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page