将imshow插入到matplotlib图形中

3

我正在尝试在matplotlib中将一个imshow图像嵌入到另一个图像中。

我有一个图,顶部有一个绘图,底部有一个imshow:

fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
plt.plot()
ax2 = fig.add_subplot(2,1,2)
plt.imshow()

然后我有另一个图,它也由顶部的绘图和底部的imshow组成。我希望这第二个图被插入到第一个图的顶部绘图中。
我尝试了按照这个示例的方法。代码运行没有错误,但是我在想要的位置上有一个空轴。
我的问题只是我不确定plt.setp()命令应该放在哪里,如果那是我应该使用的命令。
1个回答

4

首先,我认为你不能在matplotlib中将一个图形放入另一个图形中。您需要安排您的Axes对象(子图)以实现所需的外观。

您提供的示例使用绝对定位来完成此操作。setp与定位无关,它只是从插图中删除轴刻度。以下是可实现您要求的代码示例:

import numpy
import matplotlib.pyplot as plt

x = numpy.linspace(0, 1)

xx, yy = numpy.meshgrid(x, x)
im = numpy.sin(xx) + numpy.cos(yy)**2


fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(x, x**2)
ax2 = fig.add_subplot(2,1,2)
ax2.imshow(im)

inset1 = fig.add_axes([.15, .72, .15, .15])
inset1.plot(x, x**2)
plt.setp(inset1, xticks=[], yticks=[])

inset2 = fig.add_axes([0.15, 0.55, .15, .15])
inset2.imshow(im)
plt.setp(inset2, xticks=[], yticks=[])

fig.savefig('tt.png')

输入图像描述

这里的插图使用了“图形单位”显式定位坐标(整个图形大小为1乘1)。

当然,还有很多地方需要改进。您可能希望绘图的宽度相等,因此您需要:

  • 明确指定所有子图的定位;或者
  • 调整长宽比;或者
  • 使用两个GridSpec对象(这样您将拥有最少的魔术数字和手动调整)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接