Skip to main content

用于 HEP 的 Matplotlib 样式

项目描述

DOI Scikit-HEP

文档 PyPI 版本 康达锻造版本 支持的 Python 版本

构建状态 GitHub 操作状态:CI GitHub 操作状态:发布 pre-commit.ci 状态

PyPI 下载周

粘合剂

一组帮助程序,matplotlib用于更轻松地生成 HEP 中通常需要的绘图,并以与当前协作要求兼容的方式设置它们的样式(CMS、ATLAS、LHCb、ALICE 的类似 ROOT 的绘图)。

安装

pip install mplhep

入门

PyHEP 2020 提供的教程可在此处作为活页夹提供,或者您可以在此处 观看录制。

可以在mplhep.readthedocs.io找到文档。

造型

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

或者matplotlib直接使用API

plt.style.use(hep.style.ROOT)

如果默认样式不是您需要的,请打开一个问题。

默认实验标签也可用。

# Overall - both left and right annotation
hep.<experiment>.label(<text>, data=<True|False>, lumi=50, year=2017)
# Just experiment label and <text> such as 'Preliminary' or 'Simulation'
hep.<experiment>.text(<text>)

您可以使用loc={0..5}来控制标签的定位。

绘图

一维直方图

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

二维直方图

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)

更多信息

一次保存所有标签

  • hep.savelabels('test.png')将在实验标签上产生 4 种变化
    • “”->“测试.png”
    • “初步”->“test_pas.png”
    • “补充”->“test_supp.png”
    • “正在进行的工作”->“test_wip.png”
  • 选项也可以手动指定
    • hep.savelabels('test', labels=["FOO", "BAR"], suffixes=["foo.pdf", "bar"])会产生
      • “FOO”->“foo.pdf”
      • “酒吧”->“test_bar.png”
  • 的其他组件<experiment>.label()将保持不变。

其他款式:

  • hep.style.use("fira")- 使用 Fira Sans
  • hep.style.use("firamath")- 使用 Fira 数学

样式可以链接:

  • 例如hep.style.use(["CMS", "fira", "firamath"])
  • 重新出现rcParams被默默地覆盖

样式可以即时修改

  • 由于样式是字典,它们可以被链接/覆盖,它们可以很容易地即时修改。例如
hep.style.use("CMS")
hep.style.use({"font.sans-serif":'Comic Sans MS'})

使用 LaTeX 进行样式设置

  • hep.style.use("CMSTex")- 使用 LaTeX 生成所有文本标签
  • 需要拥有完整的 tex-live 发行版
  • 真正的海尔维提卡
  • 使用 sansmath 作为数学字体
  • 需要更长的时间,并不总是更好
  • 一般来说,更多的可能性,但更难让一切正常工作

笔记

一致性和字体

由于它是 ROOT 不附带任何字体,因此依赖于使用系统字体。因此,图形中的字体可能取决于它是在 OSX 还是 PC 上生成的。使用的默认无衬线字体是 Helvetica,但它只随 OSX 一起提供,在 Windows 中这将默默地回退到 Arial。

执照

Helvetica 和 Arial 都是专有的,就字体而言,这意味着一旦获得许可,您就可以使用它来创建任何文本/图形,但您不能将字体文件作为其他软件的一部分重新分发。这意味着我们不能仅仅用它来打包 Helvetica 以确保每个人在图中都有相同的字体。

幸运的是,字体似乎只有软件受版权保护,而不是实际的形状,这意味着有很多具有相似外观的开放替代品。与 Helvetica 最相似的是 Tex Gyre Heros

特克斯环流英雄

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

如果差异在下面有意义,您可以比较自己。

它们分别是 Tex Gyre Heros、Helvetica 和 Arial。

数学字体

  • 由于特殊字符的数量,数学字体与常规字体是分开的
  • 确保获得与常规字体匹配的数学字体并非易事
  • 大多数数学字体都是衬线字体,但如果想将无衬线字体用于 Helvetica 或 Arial 等普通文本,这并不理想
  • 无衬线数学字体的数量非常有限

为了保持一致的风格,Fira Sans 也包括在内。

默认 Fira Sans

https://github.com/mozilla/Fira

数学字体扩展

https://github.com/firamath/firamath

什么不起作用

上下文样式和字体

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

现在必须全局设置样式:

在出版物中使用

mplhep更新出版物中的引用和用例列表:

项目详情


发布历史 发布通知| RSS订阅