用于 HEP 的 Matplotlib 样式
项目描述
一组帮助程序,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 Sanshep.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 和 GFS Neohellenic Math,其中我更喜欢 Fira Sans
- https://tex.stackexchange.com/questions/374250/are-there-opentype-sans-math-fonts-under-development
为了保持一致的风格,Fira Sans 也包括在内。
默认 Fira Sans
https://github.com/mozilla/Fira
数学字体扩展
https://github.com/firamath/firamath
什么不起作用
上下文样式和字体
with pyplot.style.context(style.ROOT):
plotting...
- 这种语法是理想的,但是,它不适用于字体,并且 mpl 开发人员没有计划修复此行为https://github.com/matplotlib/matplotlib/issues/11673
现在必须全局设置样式:
在出版物中使用
mplhep更新出版物中的引用和用例列表:
- 使用神经网络同时进行喷射能量和质量校准,ATLAS 协作,2019
- CMS 模拟中新技术的集成和性能,Kevin Pedro,2020 年(图 5,6)
- GeantV:HEP 中并发矢量粒子传输模拟原型的结果,Amadio 等人,2020 年(图 25,26)
- 搜索标准模型希格斯玻色子衰变为粲夸克,CMS Collaboration,2019(图 1)
- 寻找衰变到 eμν 的长寿命粒子,LHCb 合作,2020
- 在 √s = 13 TeV 的质子-质子碰撞中测量 Drell-Yan 产生中轻子对横向动量的质量依赖性,CMS 合作,2022 年(图 3-)