matplotlib.imshow() 实际返回啥对象?如何使用这个对象?

Posted

技术标签:

【中文标题】matplotlib.imshow() 实际返回啥对象?如何使用这个对象?【英文标题】:What object does matplotlib.imshow() actually return? How to use this object?matplotlib.imshow() 实际返回什么对象?如何使用这个对象? 【发布时间】:2017-06-18 23:32:29 【问题描述】:

我当时正在尝试运行以下代码:

imgplot = plt.imshow(dose_data, extent = [0,4,0,6], aspect = 'auto')

在控制台上,我输入了以下输入:

In[38]:imgplot
Out[38]: <matplotlib.image.AxesImage at 0x123ebd198>

输出让我想知道对象是什么。查阅文档后,它似乎是一个 AxesImage 对象 (AxesImage Documentation)。但是我想知道如何使用存储在 imgplot 中的对象。目前我无法看到它是什么,也无法将其保存到图像中。

附:我知道如何显示图像以及如何保存图像。我只是想知道这个对象如何有用以及它实际上是什么(例如,它是一个图像对象吗?一个数组?还是其他一些奇怪类型的对象?)

【问题讨论】:

【参考方案1】:

如果您希望使用绘图对象的对象特性,请先启动图形和轴对象。

figure, axes = plt.subplots()
# or:
figure = plt.figure()
axes = figure.add_subplot(111)

然后您可以使用坐标区对象进行绘图。坐标区对象可让您操纵绘图中可以看到的大部分内容。

axes.imshow(...)

或者保存数字

figure.savefig('file.png')

【讨论】:

太棒了。对 111 子图 id 有什么意义??【参考方案2】:

正如您已经发现的,plt.imshow() 的返回类型是matplotlib.image.AxesImage。调用img = plt.imshow() 时得到的对象img 是该类的一个实例。

一般来说,你不必关心这个对象,因为它绑定到一个轴上,你想做的大部分事情,比如显示一个图形或保存它,不需要对 AxesImage 本身进行任何控制.

与任何其他对象一样,它可能有助于访问其某些属性以供以后使用。例如img.cmap 返回图片的颜色图,img.get_extent() 提供图片范围。

我想到了两个应用程序,其中AxesImage 经常使用:

    更新图像数据:如果您想更改图像数据而不生成新图,可以使用img.set_data(data) 这在使用 user interactions 或动画时可能很有用。 创建颜色条:在包含多个图像的绘图中创建颜色条时,应该为哪个图像创建此颜色条可能并不明显,因此 plt.colorbar(img, cax=cax) 将图像img 的颜色条设置为坐标轴cax

如需更多详细信息,您可能需要完善您的问题,更具体地询问某些属性、应用、潜在用途等。

【讨论】:

以上是关于matplotlib.imshow() 实际返回啥对象?如何使用这个对象?的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib imshow

Matplotlib:imshow中cmap的作用是啥?

matplotlib (imshow) 中的每个块应该如何被点击?

matplotlib imshow扭曲颜色[重复]

Matplotlib imshow 和 kivy

如何以交互方式更新 matplotlib imshow() 窗口?