每個pyplot函數都有其在面向對象API中的相應方法。如果你真的想在同一時間環比這兩個數字軸,這應該是這樣的:
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數字(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()
感謝您的回答。我明白,枚舉基本上在for循環中創建索引。那麼ax1和ax2只是索引?你能解釋一下這個例子中的對象ax1,axes1和fig1是什麼類型的? –
'ax1'和'ax2'是matplotlib軸。'enumerate'是一個簡單的方法來獲取循環中的索引。也許[這](https://www.saltycrane.com/blog/2008/04/how-to-use-py-sons-enumerate-and-zip-to/)有助於理解更好的枚舉。我也更新了答案。 – ImportanceOfBeingErnest