HEP的Matplotlib样式
项目描述
一组帮助 matplotlib
更容易地生成HEP中通常需要的图表,并以与当前合作要求兼容的方式对其样式进行设置(CMS、ATLAS、LHCb、ALICE的类似ROOT图表)。
安装
pip install mplhep
入门
PyHEP 2020上提供的教程可作为binder在此处找到,或者您可以在此处观看录制。
文档可在 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}
来控制标签位置。
绘图
1D 直方图
h, bins = [2, 3, 2], [0, 1, 2, 3]
hep.histplot(h, bins)
2D 直方图
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 种实验标签变体- "" -> "test.png"
- "Preliminary" -> "test_pas.png"
- "Supplementary" -> "test_supp.png"
- "Work in Progress" -> "test_wip.png"
- 也可以手动指定选项
hep.savelabels('test', labels=["FOO", "BAR"], suffixes=["foo.pdf", "bar"])
将生成- "FOO" -> "foo.pdf"
- "BAR" -> "test_bar.png"
<experiment>.label()
的其他组件将保持不变。
其他样式
hep.style.use("fira")
- 使用 Fira Sanshep.style.use("firamath")
- 使用 Fira Math
样式可以串联使用
- 例如
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 发行版
- 真正的 Helvetica
- 使用 sansmath 作为数学字体
- 耗时较长,并不总是更好
- 总的来说,可能性更多,但正确配置所有内容可能稍微困难一些
注意
一致性 & 字体
由于 ROOT 本身不附带任何字体,因此依赖于系统字体。因此,图中的字体可能取决于是在 OSX 还是 PC 上生成的。默认使用的无衬线字体是 Helvetica,但它在 Windows 上会静默地回退到 Arial。
许可证
Helvetica 和 Arial 都是专有字体,这意味着一旦拥有许可,就可以用它创建任何文本/图形,但不能将字体文件作为其他软件的一部分进行重新分发。这意味着我们不能简单地将 Helvetica 打包进来,以确保每个人在图表中都有相同的字体。
幸运的是,对于字体来说,似乎只有软件是受版权保护的,而不是实际的形状,这意味着有许多类似外观的开源替代品。最接近 Helvetica 的是 Tex Gyre Heros
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合作组,2019(图1)
- 寻找衰变为eμν的长期存在粒子的搜索,LHCb合作组,2020
- 在√s = 13 TeV的质子-质子碰撞中,测量Drell-Yan产生中轻子对的横向动量对质量依赖性,CMS合作组,2022(图3-)
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。