如何使用ImageGrid向colorbar添加标签?

时间:2015-09-09 01:30:52

标签: python python-2.7 matplotlib colorbar

在上一个问题中, colobar label matplotlib in ImageGrid, 有一个解决方案可以为colorbar添加标签,但这似乎与当前版本有关。

我尝试过的平台:

  • Mac w / Canopy:
    • python:2.7
    • matplotlib:1.4.3-6
  • Linux中:
    • python:2.7
    • matplotlib:1.3.1

以下是上一个问题的代码,以及一些在iPython笔记本中运行的额外代码:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid

def get_demo_image():
    import numpy as np
    from matplotlib.cbook import get_sample_data
    f = get_sample_data("axes_grid/bivariate_normal.npy", asfileobj=False)
    z = np.load(f)
    # z is a numpy array of 15x15
    return z, (-3,4,-4,3)

def demo_grid_with_single_cbar(fig):
    """
    A grid of 2x2 images with a single colorbar
    """
    grid = AxesGrid(fig, 132, # similar to subplot(132)
                    nrows_ncols = (2, 2),
                    axes_pad = 0.0,
                    share_all=True,
                    label_mode = "L",
                    cbar_location = "top",
                    cbar_mode="single",
                    )

    Z, extent = get_demo_image()
    for i in range(4):
        im = grid[i].imshow(Z, extent=extent, interpolation="nearest")
    #plt.colorbar(im, cax = grid.cbar_axes[0])
    #grid.cbar_axes[0].colorbar(im)
    cbar = grid.cbar_axes[0].colorbar(im)
    cbar.ax.set_label_text("$[a.u.]$")

    for cax in grid.cbar_axes:
        cax.toggle_label(False)

    # This affects all axes as share_all = True.
    grid.axes_llc.set_xticks([-2, 0, 2])
    grid.axes_llc.set_yticks([-2, 0, 2])
#
F = plt.figure(1, (10.5, 2.5))
F.subplots_adjust(left=0.05, right=0.95)
demo_grid_with_single_cbar(F)

plt.draw()
plt.show()

代码中的错误消息的格式为:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-60ebdb832699> in <module>()
     40 F = plt.figure(1, (10.5, 2.5))
     41 F.subplots_adjust(left=0.05, right=0.95)
---> 42 demo_grid_with_single_cbar(F)
     43 
     44 plt.draw()

<ipython-input-1-60ebdb832699> in demo_grid_with_single_cbar(fig)
     29     #grid.cbar_axes[0].colorbar(im)
     30     cbar = grid.cbar_axes[0].colorbar(im)
---> 31     cbar.ax.set_label_text("$[a.u.]$")
     32 
     33     for cax in grid.cbar_axes:

AttributeError: 'CbarAxes' object has no attribute 'set_label_text'

自问原始问题以来,matplotlib界面是否已更改?如果是这样,我如何添加颜色条标签?

1 个答案:

答案 0 :(得分:5)

就我个人而言,我总是认为matplotlib是黑魔法,类似于TeX,所以我不能保证我的答案是做你想要的“官方”方式,或者它会继续在更高版本中工作。但是感谢this gallery example,我可以设计以下咒语:

grid[0].cax.colorbar(im)
cax = grid.cbar_axes[0]
axis = cax.axis[cax.orientation]
axis.label.set_text("$[a.u.]$")

(不要忘记删除所有与colorbar相关的代码)。这适用于当前的matplotlib版本(1.4.3)。结果:

enter image description here