插图imshow在数字matplotlib

时间:2015-03-12 22:57:17

标签: python

我试图在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。我希望第二个数字插入第一个数字的顶部情节。

我尝试按照this example。代码运行没有错误,但我在我想要的位置有一个空轴。

我的问题只是因为我不知道在哪里放plt.setp()命令如果那是我应该使用的。

1 个答案:

答案 0 :(得分:1)

首先,我不认为你可以在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')

enter image description here

这里的插图使用显式定位,坐标为"数字单位" (整个数字的大小为1比1)。

现在,当然,还有很大的改进空间。您可能希望绘图的宽度相等,因此您必须:

  • 明确指定所有子图的位置;或
  • 玩纵横比;或
  • 使用两个GridSpec个对象(这样你就可以获得最少的幻数和手动调整)