【问题标题】:Plotting of 2D histogram with rootpy and matplotlib使用 rootpy 和 matplotlib 绘制二维直方图
【发布时间】:2012-10-20 01:59:14
【问题描述】:

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

我使用的代码是:

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')

但是,这给我留下了错误消息:

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'标签标记这个问题,但这是不可能的。所以我很抱歉,因为这个问题很具体。

【问题讨论】:

    标签: python matplotlib root-framework rootpy


    【解决方案1】:

    我刚刚在包含 TH2D 直方图的 ROOT 文件上尝试了您的脚本。一切正常。

    /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。

    【讨论】:

      【解决方案2】:

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

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

      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()
      

      【讨论】:

        猜你喜欢
        • 2014-07-22
        • 2015-05-29
        • 1970-01-01
        • 2016-06-09
        • 2015-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多