Skip to main content

Matplotlib styles for HEP

Project description

DOI Scikit-HEP

Docs PyPI version Conda-forge version Supported Python versions

Build Status GitHub Actions Status: CI GitHub Actions Status: Publish pre-commit.ci status

PyPI download week

Binder

A set of helpers for matplotlib to more easily produce plots typically needed in HEP as well as style them in way that's compatible with current collaboration requirements (ROOT-like plots for CMS, ATLAS, LHCb, ALICE).

Installation

pip install mplhep

Getting Started

A tutorial given at PyHEP 2020 is available as a binder here or you can watch the recording here.

Styling

import mplhep as hep
hep.set_style(hep.style.ROOT) # For now ROOT defaults to CMS
# Or choose one of the experiment styles
hep.set_style(hep.style.CMS)
# or
hep.set_style("ATLAS") # string aliases work too
# or
hep.set_style("LHCb2")  # or "LHCb1"
# or
hep.set_style("ALICE")

The style can be set directly from the matplotlib API as well

import matplotlib.pyplot as plt
import mplhep as hep
plt.style.use(hep.style.ROOT)

Experiment specific style are also available. If the default styles are not what you need, I'd be happy to merge in new styles or modify the current ones.

Default experiment labels are also available.

# Overall - both left and right annotation
hep.<experiment>.label()
# Just experiment label and <text> such as 'Preliminary' or 'Simulation'
hep.<experiment>.text(<text>)

Plotting

1D Histograms

h, bins = [2, 3, 2], [0, 1, 2, 3]
hep.histplot(h, bins)

2D Histograms

import numpy as np
xbins, ybins = [0, 1, 2, 3], [0, 1, 2, 3]
H = np.array([[2,3,2], [1,2,1], [3,1,3]])
hep.hist2dplot(H, xbins, ybins)

More Information

Other styles:

  • hep.set_style("fira") - use Fira Sans
  • hep.set_style("firamath") - use Fira Math

Styles can be chained:

  • e.g. hep.set_style(["CMS", "fira", "firamath"])
  • reappearing rcParams get overwritten silently

Styles can be modified on the fly

  • Since styles are dictionaries and they can be chained/overwritten they can be easily modified on the fly. e.g.
hep.set_style("CMS")
hep.set_style({"font.sans-serif":'Comic Sans MS'})

Styling with LaTeX

  • hep.set_style("CMSTex") - Use LaTeX to produce all text labels
  • Requires having the full tex-live distro
  • True Helvetica
  • Use sansmath as the math font
  • Takes longer and not always better
  • In general more possibilities, but a bit more difficult to get everything working properly

Notes

Consistency & Fonts

As it is ROOT does not come with any fonts and therefore relies on using system fonts. Therfore the font in a figure can be dependent on whether it was produced on OSX or PC. The default sans-serif font used is Helvetica, but it only comes with OSX, in Windows this will silently fallback to Arial.

License

Both Helvetica and Arial are proprietary, which as far as fonts go means you can use it to create any text/graphics once you have the license, but you cannot redistribute the font files as part of other software. That means we cannot just package Helvetica with this to make sure everyone has the same font in plots.

Luckily for fonts it seems only the software is copyrighted, not the actual shapes, which means there are quite a few open alternatives with similar look. The most closely resembling Helvetica being Tex Gyre Heros

Tex Gyre Heros

http://www.gust.org.pl/projects/e-foundry/tex-gyre/heros

You can compare yourself if the differences are meanigful below.

They are Tex Gyre Heros, Helvetica and Arial respecively.

Math Fonts

  • Math fonts are a separate set from regular fonts due to the amount of special characters
  • It's not trivial to make sure you get a matching math font to your regular font
  • Most math-fonts are serif fonts, but this is not ideal if one wants to use sans-serif font for normal text like Helvetica or Arial
  • The number of sans-serif math-fonts is very limited

For consistent styling Fira Sans is included as well.

Default Fira Sans

https://github.com/mozilla/Fira

Math font extension

https://github.com/firamath/firamath

What doesn't work

Context styles and fonts

with pyplot.style.context(style.ROOT):
    plotting...

For now one has to set the style globally:

Use in publications

Updating list of citations and use cases of mplhep in publications:

Project details


Release history Release notifications | RSS feed

This version

0.3.0

Download files

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

Source Distribution

mplhep-0.3.0.tar.gz (29.7 kB view details)

Uploaded Source

Built Distribution

mplhep-0.3.0-py3-none-any.whl (30.7 kB view details)

Uploaded Python 3

File details

Details for the file mplhep-0.3.0.tar.gz.

File metadata

  • Download URL: mplhep-0.3.0.tar.gz
  • Upload date:
  • Size: 29.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.9

File hashes

Hashes for mplhep-0.3.0.tar.gz
Algorithm Hash digest
SHA256 dcd5d923e7ba6ca2e6a348cc2ad79b3352ffa07f4490f534c9695c9cb775752a
MD5 dd6ad56e8c2a3bcd509d5e85c49a942b
BLAKE2b-256 ba9c7b078bea78cef6be5ff2427c9cfa0215567a65c9d8a0704b18ab6065cacf

See more details on using hashes here.

File details

Details for the file mplhep-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: mplhep-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 30.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.9

File hashes

Hashes for mplhep-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 84d20b5d461d4b1ce649bc0564b578580aa6e182bdd093920f0568356a9c5390
MD5 1db3156e459ff6590273acda29a6a328
BLAKE2b-256 a47aecb16642f1d00032e08527c011107b22a63680a3f70ae192ef5482f3cffa

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page