简体   繁体   English

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

[英]How can I add a label to colorbar using ImageGrid?

In a previous question, colobar label matplotlib in ImageGrid , had a solution for adding a label to the colorbar, but this seems to be broken with the current version. 在上一个问题中, ImageGrid中的colobar标签matplotlib有一个向colorbar添加标签的解决方案,但这似乎与当前版本有关。

Platforms I have tried: 平台我试过:

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

Below is the code from the previous question, with some extra code for running in an iPython notebook: 下面是上一个问题的代码,以及一些在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()

The error message from the code is of the form: 代码中的错误消息的形式如下:

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

Has the matplotlib interface changed since the original question was asked? 自问问原始问题以来,matplotlib接口是否已更改? If so, how do I add the colorbar label? 如果是这样,我如何添加colorbar标签?

Personally, I've always perceived matplotlib as black magic, similar to TeX , so I cannot guarantee that my answer is the "official" way of doing what you want, or that it will continue to work in later versions. 就个人而言,我一直认为matplotlib是黑魔法,类似于TeX ,所以我不能保证我的答案是做你想要的“官方”方式,或者它将继续在以后的版本中工作。 But thanks to this gallery example , I could devise the following incantation: 但是由于这个画廊的例子 ,我可以设计以下咒语:

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

(don't forget to remove all your colorbar-related code). (不要忘记删除所有与colorbar相关的代码)。 This works in the current matplotlib version (1.4.3). 这适用于当前的matplotlib版本(1.4.3)。 The result: 结果:

在此输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM