您好,登錄后才能下訂單哦!
這篇文章給大家介紹Matplotlib庫(kù)基礎(chǔ)中如何自動(dòng)調(diào)整函數(shù),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
在matplotlib中,軸Axes的位置以標(biāo)準(zhǔn)化圖形坐標(biāo)指定,可能發(fā)生的情況是軸標(biāo)簽、標(biāo)題、刻度標(biāo)簽等等會(huì)超出圖形區(qū)域,導(dǎo)致顯示不全。Matplotlib v1.1 引入了一個(gè)新的命令tight_layout(),作用是自動(dòng)調(diào)整子圖參數(shù),使之填充整個(gè)圖像區(qū)域。
調(diào)用plt.show()函數(shù)時(shí)會(huì)自動(dòng)運(yùn)行tight_layout()函數(shù),如下所示:
def show(self): self.figure.tight_layout() FigureCanvasAgg.draw(self) if PORT is None: return if matplotlib.__version__ < '1.2': buffer = self.tostring_rgb(0, 0) else: buffer = self.tostring_rgb() if len(set(buffer)) <= 1: # do not plot empty return render = self.get_renderer() width = int(render.width) plot_index = index if os.getenv("PYCHARM_MATPLOTLIB_INTERACTIVE", False) else -1 try: sock = socket.socket() sock.connect((HOST, PORT)) sock.send(struct.pack('>i', width)) sock.send(struct.pack('>i', plot_index)) sock.send(struct.pack('>i', len(buffer))) sock.send(buffer) except OSError as _: # nothing bad. It just means, that our tool window doesn't run yet pass
我們通過(guò)以下一個(gè)例程來(lái)介紹,最終的顯示效果如下所示:
fig = plt.figure(figsize=(12, 8)) ax1 = fig.add_subplot(211) ax2 = fig.add_subplot(212) ax1.plot(np.arange(10), np.random.randint(0, 10, 10), ls='-', c='r', lw=1) ax2.plot(np.arange(10), np.random.randint(10, 20, 10), ls='-', c='y', lw=1) plt.show()
不過(guò)很多時(shí)候會(huì)出現(xiàn)tight_layout()不工作的情況,比如出現(xiàn)以下提示:
UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect. warnings.warn("This figure includes Axes that are not compatible "
這個(gè)警告的原因是tight_layout這個(gè)函數(shù)出錯(cuò)了,警告語(yǔ)句出現(xiàn)的原因時(shí)axes列表為空,tight_layout()中相應(yīng)的代碼,如下所示:
subplotspec_list = get_subplotspec_list(self.axes) if None in subplotspec_list: cbook._warn_external("This figure includes Axes that are not " "compatible with tight_layout, so results " "might be incorrect.")
可見(jiàn)這個(gè)函數(shù)并不太穩(wěn)定。tight_layout不起作用的時(shí)候,繪圖效果如下所示,可見(jiàn)子圖并沒(méi)有填充整個(gè)圖像區(qū)域。
網(wǎng)上搜索了下發(fā)現(xiàn)也有類似的情況出現(xiàn),附上部分案例的截圖:
接下來(lái)我們嘗試下解決方法,tight_layout在plt.savefig的調(diào)用方式相對(duì)比較穩(wěn)定,我們將plt.show()函數(shù)替換為plt.savefig函數(shù),替換后會(huì)在本地另外為png圖片,該圖片中子圖填充了整個(gè)圖像區(qū)域。
plt.savefig('fig.png', bbox_inches='tight') # 替換 plt.show()
關(guān)于Matplotlib庫(kù)基礎(chǔ)中如何自動(dòng)調(diào)整函數(shù)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。