uproot:从jupyter笔记本上的.root文件加载和重新绘制TH2直方图的最佳方法

如何解决uproot:从jupyter笔记本上的.root文件加载和重新绘制TH2直方图的最佳方法

我是python和root的新手。以前,我一直在C ++环境中使用ROOT。 按照uproot教程,我可以从.root文件中读取我的TH2D图形

我现在想通过matplotlib或seaborn重新创建和重新绘制现有图形,但是我不了解导入的TH2的结构。 myTH2D._members()正确输出

['fName','fTitle','fLineColor','fLinestyle','flinewidth','fFillColor','fFillStyle','fMarkerColor','fMarkerStyle','fMarkerSize','fNcells','fXaxis','fYaxis','fZaxis','fBarOffset','fBarWidth','fEntries','fTsumw','fTsumw2','fTsumwx','fTsumwx2','fMaximum','fMinimum','fnormFactor','fContour','fSumw2','fOption','fFunctions','fBufferSize','fBuffer','fBinStatErrOpt','fScalefactor','fTsumwy','fTsumwy2','fTsumwxy']

myTH2D.edges输出右轴,myTH2D.values输出右计数(已通过plt.imshow(myTH2D.values)进行了确认。问题在我调用myTH2D.pandas()

时开始>
count   variance
tof1 [ns]   tof2 [ns]       
[-inf,4500.0)  [-inf,4500.0)  0.0 0.0
[4500.0,4507.142857142857) 0.0 0.0
[4507.142857142857,4514.285714285715)  0.0 0.0
[4514.285714285715,4521.428571428572)  0.0 0.0
[4521.428571428572,4528.571428571428)  0.0 0.0
... ... ... ...
[7500.0,inf)   [6971.428571428572,6978.571428571429)  0.0 0.0
[6978.571428571429,6985.714285714286)  0.0 0.0
[6985.714285714286,6992.857142857143)  0.0 0.0
[6992.857142857143,7000.0) 0.0 0.0
[7000.0,inf)   0.0 0.0
123904 rows × 2 columns

并且用myTH2D.numpy()创建的ntuple以我不了解的方式嵌套:

(array([[0.,0.,...,0.],[0.,0.]]),[(array([4500.,4508.57142857,4517.14285714,4525.71428571,4534.28571429,4542.85714286,4551.42857143,4560.,7414.28571429,7422.85714286,7431.42857143,7440.,7448.57142857,7457.14285714,7465.71428571,7474.28571429,7482.85714286,7491.42857143,7500.        ]),array([4500.,4507.14285714,4514.28571429,4521.42857143,4528.57142857,4535.71428571,4550.,6957.14285714,6964.28571429,6971.42857143,6978.57142857,6985.71428571,6992.85714286,7000.        ]))])

您对如何处理这些元组有任何建议吗?

谢谢!

编辑:

使用以下语法,我几乎可以实现正确的绘图。与原始版本相比,它是翻转的:

plt.pcolormesh(myTH2D[1][0][0],myTH2D[1][0][1],myTH2D[0])

sx: original ROOT TH2D; dx: plt.pcolormesh numpy

尽管如此,我的问题仍然存在:我想通过熊猫处理数据,因此要加上标签:现在我不知道哪个是x轴,哪个是y轴。有什么想法吗?

解决方法

uproot3理解numpy.histogram。因此,您可以这样做:

import uproot3 as uproot
import numpy as np

x = np.random.normal(size=10000)
y = np.random.normal(size=10000)

f = uproot.recreate('example.root',compression=uproot.ZLIB(4))
f["h"] = np.histogram2d(x,y,80)
f.close()

您现在应该在example.root中有一个名为TH2F的{​​{1}}

,

从边缘和垃圾箱计数(myTH2D.numpy())的数组中,您可以使用以下任何一种技术在Matplotlib中对其进行绘制:

Python: Creating a 2D histogram from a numpy matrix

您提到了Seaborn,但我对此不太熟悉。当然,它具有类似的功能。

在最前沿,您可以安装uproot4hist>=2.0.0(以获取历史记录的预发行版),然后只需

myTH2D.to_hist().plot()

hist库的目标是成为直方图的一站式商店,并且接近其第一个非预发布版本。 (该系列从2.0.0开始,因为它接管了一个不再更新的项目的名称。“ hist”在名称上通常会丢失!)

Uproot 4代码库几乎可以替换当前的Uproot;它需要文档和文件写入功能。该接口与解决Uproot 3的接口问题(例如字符串vs字节字符串)略有不同,因此这就是为什么将其作为具有临时不同库名的逐步过渡来处理,而不是一次全部更改的原因。但是,如果您只是刚入门,则可能要从新库开始,这样就不必在不久的将来(今年秋天)习惯更改。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?