我有一种情况,我使用 matplotlib 生成了 20 多个不同的图像。这做了很多很多次。20 张图像中的每一张在背景中都有相同的轮廓集。为了减少处理时间,能够将结果countourf()
从一个Axes
实例复制到另一个实例将很有用。为了做到这一点,我试过这个:
#!/bin/env python
import os
import numpy as np
from matplotlib import pyplot as plt
def copycontours():
#Create figures
fig1 = plt.figure()
fig2 = plt.figure()
fig3 = plt.figure()
#Create axes
ax1 = fig1.add_axes((0.05,0.05,0.90,0.90))
ax2 = fig2.add_axes((0.05,0.05,0.90,0.90))
ax3 = fig3.add_axes((0.05,0.05,0.90,0.90))
#Create random data
data = np.random.normal(25, size=(25,25))
#Add contours to first axes instance and save image
contours = ax1.contourf(data)
fig1.savefig('test.png')
#Add contours to second axes instance from first axes instance
for collection in ax1.collections:
ax2.add_collection(collection)
fig2.savefig('test2.png')
#Add contours to third axes instance from
for collection in contours.collections:
ax3.add_collection(collection)
fig3.savefig('test3.png')
os.system('display test.png &')
os.system('display test2.png &')
os.system('display test3.png &')
if __name__ == '__main__':
copycontours()
第一个图(test.png)出来看起来是正确的。轴范围从 0 到 25,并且填充了整个域。
其他两个(test2.png,test3.png)的结果不同。它们的轴范围从 0 到 1,等高线区域仅填充从 0.0 到大约 7.9 的区域。
通过重置轴限制ax2.set_xlim(0,25)
并ax2.set_xlim(0,25)
更改轴范围,但不能解决更大的问题。
有没有人想过如何解决这个问题或以其他方式重用结果的另一种contourf()
方法?