[英]In Matplotlib, what does the argument mean in fig.add_subplot(111)?
[英]Why does matplotlib.gridspec's tight_layout not work correctly with pyplot.subplot whereas it does with fig.add_subplot?
我正在嘗試使用gridspec創建兩個彼此相鄰的子圖(實際圖更為復雜,但這是基本思想)。 我正在使用plt.subplot
創建子圖,但這似乎無法產生預期的結果。 我僅在圖的右側獲得第二個子圖,而沒有獲得第一個子圖。
另一方面,如果我使用fig.add_subplot
創建了子圖,盡管得到了tight_layout警告,該圖仍可以正確顯示。 我對此行為感到有些驚訝,因為pyplot的subplot函數在內部調用了fig.add_subplot(然后進行一些檢查以查看該子圖是否已經存在-我猜是嗎?)。 這是僅產生最右邊子圖的代碼。 切換注釋以使用plt.gcf().add_subplot
可使注釋按預期工作。
from matplotlib import gridspec,pyplot as plt
gs = gridspec.GridSpec(1,1)
ax1 = plt.subplot(gs[0,0])
# ax1 = plt.gcf().add_subplot(gs[0,0])
ax1.plot(range(3),range(3))
gs.tight_layout(plt.gcf(),rect=[0,0,0.45,1])
gs = gridspec.GridSpec(1,1)
ax1 = plt.subplot(gs[0,0])
# ax1 = plt.gcf().add_subplot(gs[0,0])
ax1.plot(range(3),range(3))
gs.tight_layout(plt.gcf(),rect=[0.55,0,1,1])
plt.show()
我是在做錯什么,還是我在這里想念什么? 作為參考,這是pyplot.subplot的主要作用:
fig = gcf()
a = fig.add_subplot(*args, **kwargs)
bbox = a.bbox
byebye = []
for other in fig.axes:
if other==a: continue
if bbox.fully_overlaps(other.bbox):
byebye.append(other)
for ax in byebye: delaxes(ax)
return a
我的問題是:為什么使用pyplot.subplot不能產生與fig.add_subplot相同的結果?
subplot
作用是檢查重疊的圖並刪除它們(如果存在)。 您的第二plt.subplot
圖與第一plt.subplot
圖重疊,因此您的第二個plt.subplot
將刪除第一個。 Figure.add_subplot
不會刪除重疊的子圖。
請注意,您正在創建填充整個圖形的子圖:
gs = gridspec.GridSpec(1,1)
ax1 = plt.subplot(gs[0,0])
這是1x1網格中的子圖,因此它將填充整個圖形並與以前的任何子圖重疊。
順便說一句,這個問題與可以正常工作的tight_layout
無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.