跳转到主要内容

HEP的Matplotlib样式

项目描述

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

一组帮助 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 Sans
  • hep.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。

默认 Fira Sans

https://github.com/mozilla/Fira

数学字体扩展

https://github.com/firamath/firamath

不工作的情况

上下文样式和字体

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

目前必须全局设置样式

在出版物中使用

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

项目详情


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

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

mplhep-0.3.52.tar.gz (1.5 MB 查看哈希值)

上传时间

构建分布

mplhep-0.3.52-py3-none-any.whl (39.9 kB 查看哈希值)

上传时间 Python 3

由以下组织支持