在面向对象的API中,每个pyplot函数都有其相应的方法。如果您真的想同时在两个图形的轴上循环,则如下所示:
import numpy as np
import matplotlib.pyplot as plt
x1 = x2 = np.arange(10)
y1 = y2 = c = np.random.rand(10,6)
fig1, axes1 = plt.subplots(nrows=2,ncols=3)
fig1.subplots_adjust(hspace=.5,wspace=0.4)
fig2, axes2 = plt.subplots(nrows=2,ncols=3)
fig2.subplots_adjust(hspace=.5,wspace=0.4)
for i, (ax1,ax2) in enumerate(zip(axes1.flatten(), axes2.flatten())):
ax1.set_title('day='+str(i))
ax2.set_title('day='+str(i))
sc1 = ax1.scatter(x1,y1[:,i], c=c[:,i])
sc2 = ax2.scatter(x2,y2[:,i], c=c[:,i])
fig1.colorbar(sc1, ax=ax1)
fig2.colorbar(sc2, ax=ax2)
plt.savefig("plot.png")
plt.show()
plt.close()
在这里,你在两个扁平轴阵列上循环,这样
ax1
和
ax2
matplotlib axes
绘制到。
fig1
和
fig2
matplotlib.figure.Figure
).
为了获得索引,
enumerate
已使用。所以这条线
for i, (ax1,ax2) in enumerate(zip(axes1.flatten(), axes2.flatten())):
# loop code
for i in range(6):
ax1 = axes1.flatten()[i]
ax2 = axes2.flatten()[i]
# loop code
或
i = 0
for ax1,ax2 in zip(axes1.flatten(), axes2.flatten()):
# loop code
i += 1
它们都写得更长。
此时,您可能会感兴趣的是,尽管上述使用面向对象API的解决方案肯定更通用、更可取,但纯pyplot解决方案仍然是可能的。这看起来像
import numpy as np
import matplotlib.pyplot as plt
x1 = x2 = np.arange(10)
y1 = y2 = c = np.random.rand(10,6)
plt.figure(1)
plt.subplots_adjust(hspace=.5,wspace=0.4)
plt.figure(2)
plt.subplots_adjust(hspace=.5,wspace=0.4)
for i in range(6):
plt.figure(1)
plt.subplot(2,3,i+1)
sc1 = plt.scatter(x1,y1[:,i], c=c[:,i])
plt.colorbar(sc1)
plt.figure(2)
plt.subplot(2,3,i+1)
sc2 = plt.scatter(x1,y1[:,i], c=c[:,i])
plt.colorbar(sc2)
plt.savefig("plot.png")
plt.show()
plt.close()