一文教會你調(diào)整Matplotlib子圖的大小
前段時(shí)間就遇到了這個(gè)問題,一直忘了寫,今晚夜深人靜總結(jié)一波~
問題
我相信,看到這篇博客的人,你肯定已經(jīng)會使用Matplotlib中的pyplot畫圖。
比如下面這種圖
你也應(yīng)該會調(diào)整單個(gè)圖的大小了,就是使用如下語句控制單個(gè)圖形figure的大小,比如我這里設(shè)的8*6的。
fig3 = plt.figure(figsize=(8,6))
但隨著繼續(xù)深入的學(xué)習(xí),有時(shí)我們很有必要將兩個(gè)圖畫在一起,來做對比,所以你也應(yīng)該會在一個(gè)畫布上畫多個(gè)子圖了。比如下圖
即是通過subplot實(shí)現(xiàn)
#展示一下數(shù)據(jù) fig = plt.figure(figsize=(15,7)) fig1 = plt.subplot(231) plt.scatter(data.loc[:,'Avg. Area Income'],data.loc[:,'Price']) plt.title('Income VS Price') fig2 = plt.subplot(232) plt.scatter(data.loc[:,'Avg. Area House Age'],data.loc[:,'Price']) plt.title('Age VS Price') fig3 = plt.subplot(233) plt.scatter(data.loc[:,'Avg. Area Number of Rooms'],data.loc[:,'Price']) plt.title('Number VS Price') fig4 = plt.subplot(234) plt.scatter(data.loc[:,'Area Population'],data.loc[:,'Price']) plt.title('Population VS Price') fig5 = plt.subplot(235) plt.scatter(data.loc[:,'size'],data.loc[:,'Price']) plt.title('size VS Price') plt.show()
目前為止圖好像沒有問題,那問題在哪呢?就是在子圖比較少的時(shí)候,整個(gè)圖可能會變形,出現(xiàn)下圖情況。
這顯然不是我們期望的,我們希望他不要拉長。但是貌似直接通過subplot畫出的子圖無法更改大小,網(wǎng)上給的一些方案也比較麻煩。
簡便的解決方法
把這兩個(gè)子圖畫在同一個(gè)畫布里,這樣即是子圖無法改變,但是外面的畫布大小可以改變,子圖就可以根據(jù)外面畫布大小自適應(yīng)的顯示了。
對于該圖
其原始代碼為
fig6 = plt.subplot(121) label0 = plt.scatter(X.loc[:,'V1'][y_corrected==0],X.loc[:,'V2'][y_corrected==0]) label1 = plt.scatter(X.loc[:,'V1'][y_corrected==1],X.loc[:,'V2'][y_corrected==1]) label2 = plt.scatter(X.loc[:,'V1'][y_corrected==2],X.loc[:,'V2'][y_corrected==2]) plt.title("corrected data") plt.xlabel('V1') plt.ylabel('V2') plt.legend((label0,label1,label2),('label0','label1','label2')) plt.scatter(centers[:,0],centers[:,1]) fig7 = plt.subplot(122) label0 = plt.scatter(X.loc[:,'V1'][y==0],X.loc[:,'V2'][y==0]) label1 = plt.scatter(X.loc[:,'V1'][y==1],X.loc[:,'V2'][y==1]) label2 = plt.scatter(X.loc[:,'V1'][y==2],X.loc[:,'V2'][y==2]) plt.title("labled data") plt.xlabel('V1') plt.ylabel('V2') plt.legend((label0,label1,label2),('label0','label1','label2')) plt.scatter(centers[:,0],centers[:,1]) plt.show()
可以看到兩個(gè)子圖fig6和fig7都是直接使用subplot得到的,所以它變形了。
修改后應(yīng)該是這樣的:
對應(yīng)代碼 :
fig = plt.figure(figsize=(11,4)) fig6 = plt.subplot(121) label0 = plt.scatter(X.loc[:,'V1'][y_corrected==0],X.loc[:,'V2'][y_corrected==0]) label1 = plt.scatter(X.loc[:,'V1'][y_corrected==1],X.loc[:,'V2'][y_corrected==1]) label2 = plt.scatter(X.loc[:,'V1'][y_corrected==2],X.loc[:,'V2'][y_corrected==2]) plt.title("corrected data") plt.xlabel('V1') plt.ylabel('V2') plt.legend((label0,label1,label2),('label0','label1','label2')) plt.scatter(centers[:,0],centers[:,1]) fig7 = plt.subplot(122) label0 = plt.scatter(X.loc[:,'V1'][y==0],X.loc[:,'V2'][y==0]) label1 = plt.scatter(X.loc[:,'V1'][y==1],X.loc[:,'V2'][y==1]) label2 = plt.scatter(X.loc[:,'V1'][y==2],X.loc[:,'V2'][y==2]) plt.title("labled data") plt.xlabel('V1') plt.ylabel('V2') plt.legend((label0,label1,label2),('label0','label1','label2')) plt.scatter(centers[:,0],centers[:,1]) plt.show()
相比原來的代碼就多了第一行的操作,定一個(gè)合適畫布的大小就可以方便動態(tài)調(diào)整子圖了。
麻煩點(diǎn)的方法
看到網(wǎng)上是有可以自定義子圖大小的方法的,不過相比我想出來的這個(gè)方法,感覺太麻煩了。這個(gè)方法能解決我這一類問題了,如果后面遇到需要一個(gè)子圖大一個(gè)子圖小的問題再單獨(dú)記錄把。
總結(jié)
到此這篇關(guān)于調(diào)整Matplotlib子圖大小的文章就介紹到這了,更多相關(guān)Matplotlib子圖大小調(diào)整內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Matplotlib多子圖使用一個(gè)圖例的實(shí)現(xiàn)
- Matplotlib繪圖基礎(chǔ)之子圖詳解
- 利用Matplotlib實(shí)現(xiàn)單畫布繪制多個(gè)子圖
- Python+matplotlib繪制多子圖的方法詳解
- matplotlib圖形整合之多個(gè)子圖繪制的實(shí)例代碼
- Python Matplotlib繪制多子圖詳解
- Matplotlib繪制子圖的常見幾種方法
- python使用matplotlib:subplot繪制多個(gè)子圖的示例
- matplotlib subplot繪制多個(gè)子圖的方法示例
- Matplotlib子圖的創(chuàng)建的實(shí)現(xiàn)
相關(guān)文章
python運(yùn)行shell命令subprocess的實(shí)現(xiàn)
本文主要介紹了python運(yùn)行shell命令subprocess的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Python入門教程(四十三)Python的NumPy數(shù)據(jù)類型
這篇文章主要介紹了Python入門教程(四十二)Python的NumPy數(shù)組裁切,NumPy有一些額外的數(shù)據(jù)類型,并通過一個(gè)字符引用數(shù)據(jù)類型,例如 i 代表整數(shù),u 代表無符號整數(shù)等,需要的朋友可以參考下2023-05-05Django 添加靜態(tài)文件的兩種實(shí)現(xiàn)方法(必看篇)
下面小編就為大家?guī)硪黄狣jango 添加靜態(tài)文件的兩種實(shí)現(xiàn)方法(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07mat矩陣和npy矩陣實(shí)現(xiàn)互相轉(zhuǎn)換(python和matlab)
這篇文章主要介紹了mat矩陣和npy矩陣實(shí)現(xiàn)互相轉(zhuǎn)換(python和matlab),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07解決pycharm編輯區(qū)顯示yaml文件層級結(jié)構(gòu)遇中文亂碼問題
這篇文章主要介紹了解決pycharm編輯區(qū)顯示yaml文件層級結(jié)構(gòu)遇中文亂碼問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python基于當(dāng)前時(shí)間批量創(chuàng)建文件
這篇文章主要介紹了Python基于當(dāng)前時(shí)間批量創(chuàng)建文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05