首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用rootpy和matplotlib绘制二维直方图

用rootpy和matplotlib绘制二维直方图
EN

Stack Overflow用户
提问于 2012-10-31 00:51:06
回答 2查看 2.1K关注 0票数 4

我正在尝试用rootpy和matplotlib绘制一个根2D直方图。

我使用的代码是:

代码语言:javascript
复制
from rootpy.io import File
from rootpy.plotting import Hist
import rootpy.plotting.root2matplotlib as rplt
import matplotlib.pyplot as plt
inputFile = File('mydata.root', 'read')
h_response = inputFile.myfolder.response

plt.figure(figsize=(16, 10), dpi=100)
rplt.hist(h_response, label='response matrix')
h_response.Draw()
plt.xlabel('reconstructed $E_{\mathrm{T}}^{miss}$')
plt.ylabel('Generated $E_{\mathrm{T}}^{miss}$')
plt.title('Response Matrix')
plt.savefig('ResponseMatrix.png')

然而,这给我留下了错误msg:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/storage/Dropbox/Workspace/Analysis/DailyPythonScripts/src/unfolding.py", line 66, in <module>
    rplt.hist(h_response, label='response matrix')
  File "/usr/local/lib/python2.7/dist-packages/rootpy-0.7.0_a0-py2.7-linux-x86_64.egg/rootpy/plotting/root2matplotlib.py", line 140, in hist
    snap_zero=snap_zero)
  File "/usr/local/lib/python2.7/dist-packages/rootpy-0.7.0_a0-py2.7-linux-x86_64.egg/rootpy/plotting/root2matplotlib.py", line 82, in _set_bounds
    ywidth = ymax - ymin
TypeError: unsupported operand type(s) for -: 'list' and 'list'

显然我用错了rootpy2matplotlib模块,所以我看了一下:这个模块提供了: hist,bar和errorbar函数--没有专门针对>= 2D的。

我是不是遗漏了什么?有没有简单的变通方法?

PS:我想用一个“rootpy”标签来标记这个问题,但这是不可能的。所以我很抱歉,因为这个问题很具体。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-18 16:00:22

rootpy的root2matplotlib界面现在提供了用于绘制2D根直方图的hist2d、imshow和轮廓函数。请参阅此处的示例:

https://github.com/rootpy/rootpy/blob/master/examples/plotting/plot_matplotlib_hist2d.py

代码语言:javascript
复制
from matplotlib import pyplot as plt
from rootpy.plotting import root2matplotlib as rplt
from rootpy.plotting import Hist2D
import numpy as np

a = Hist2D(100, -3, 3, 100, 0, 6)
a.fill_array(np.random.multivariate_normal(
    mean=(0, 3),
    cov=np.arange(4).reshape(2, 2),
    size=(1E6,)))

fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))

ax1.set_title('hist2d')
rplt.hist2d(a, axes=ax1)

ax2.set_title('imshow')
im = rplt.imshow(a, axes=ax2)

ax3.set_title('contour')
rplt.contour(a, axes=ax3)

fig.subplots_adjust(right=0.8)
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])
fig.colorbar(im, cax=cbar_ax)

plt.show()

票数 4
EN

Stack Overflow用户

发布于 2013-03-04 22:19:43

我刚刚在一个包含TH2D直方图的根文件上测试了您的脚本。一切都成功了。

/opt/rootpy # cat version.txt给我: 0.7.0

如果我检查我的

/usr/local/lib/python2.7/dist-packages/rootpy-dev-py2.7.egg/rootpy/plotting/root2matplotlib.py

并将其与您得到的错误消息进行比较,那么看起来我们使用的是不同版本的rootpy。

尝试最新版本的rootpy。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13143911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档