【matplotlib】可視化解決方案——子圖間距問題解決方案

可視化常見問題解決方案(五)子圖間距問題解決方案

1.前言

我們在日常畫圖的過程中經(jīng)常會發(fā)現(xiàn)子圖之間的距離過近導(dǎo)致下方子圖的標題被上方子圖的坐標軸遮擋望迎。如下圖所示:
子圖過于擁擠

2.解決方案

2.1解決方案1

subplots_adjust(self, left=None, bottom=None, right=None, top=None,wspace=None, hspace=None)

參數(shù)1:left:指定子圖左邊緣距離
參數(shù)2:bottom:指定子圖底部距離
參數(shù)3:right:指定子圖右邊緣距離
參數(shù)4:top:指定子圖頂部距離
參數(shù)5:wspace:指定子圖之間的橫向距離
參數(shù)6:hspace:指定子圖之間的縱向距離


參數(shù)說明:

  1. 所有的距離并不是指絕對數(shù)值而是一個相對比例壕探,數(shù)值都在0-1之間洞翩。

  2. leftbottom參數(shù)指的是左右兩邊的空白比例,例如left=0.5相當于左空白為0.5.而righttop參數(shù)則指得是整個圖框所占的比例囤踩,例如top=0.9相當于上空白為0.1债蓝。


對上圖的使用subplots_adjust方法進行調(diào)整,示例代碼如下:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 設(shè)置支持中文
import numpy as np

#初始化顏色
color = ['red', 'black', 'blue', 'pink', 'purple', 'green', 'yellow', 'orange', '#d00F0d']
#初始化圖框
figure, [(ax1, ax2, ax3), (ax4, ax5, ax6), (ax7, ax8, ax9) ] = plt.subplots(3, 3)

#畫圖京髓,設(shè)置標簽,標題
for i, j in zip([ax1, ax2, ax3, ax4, ax5, ax6, ax7, ax8, ax9], np.arange(9)):
    i.plot(np.random.random(10), color=color[j])
    i.set_title('ax' + str(j+1), fontsize=25)
    i.set_xlabel('X', fontsize=15)
    i.set_ylabel('Y', fontsize=15)

figure.subplots_adjust(hspace=0.5)  #使用subplots_adjust方法調(diào)整子圖參數(shù)
plt.show()

繪圖結(jié)果如下:

image.png

2.2解決方案2

如果認為使用subplots_adjust方法無法實時反饋效果或者對參數(shù)數(shù)值大小不好確定商架,那么也可以試試畫圖完畢之后使用maplotlib自帶的工具欄工具Configure subplots進行設(shè)置堰怨,其參數(shù)與subplots_adjust方法是相同的。

調(diào)整前圖片:

調(diào)整前

打開工具欄Configure subplots:

打開工具欄

調(diào)整后圖片:

調(diào)整后

2.3解決方案3

除了上述兩種方法甸私,matplotlib庫還提供了一種更加智能的調(diào)整參數(shù)方法诚些,即使用tight_layout方法調(diào)整子圖之間和周圍的填充,是指產(chǎn)生指定的緊密布局皇型。該方法參數(shù)如下:

tight_layout( pad=1.08, h_pad=None, w_pad=None, rect=None)

參數(shù)1:pad:指定圖形邊緣和子圖邊緣之間的填充诬烹,以字體大小為單位
參數(shù)2:h_pad:指定相鄰子圖邊緣之間縱向的填充,以字體大小為單位
參數(shù)3:w_pad:指定相鄰子圖邊緣之間橫向的填充弃鸦,以字體大小為單位
參數(shù)4:rect:指定figure中子圖矩形圖框的位置


參數(shù)說明:

  1. h_pad和w_pad參數(shù)的意義與subplots_adjust方法中的hspace和wspace是一致的绞吁,都是描述子圖之間的距離。

  2. pad參數(shù)面數(shù)的是所有子圖組成的矩形和圖框之間的距離唬格。

  3. 當參數(shù)不合理的時候家破,將無法應(yīng)用tight_layout,會給出警告购岗,所以最好不要傳遞任何參數(shù)汰聋,以期達到最好的效果。


同樣對上圖的使用tight_layout方法進行調(diào)整喊积,示例代碼如下:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 設(shè)置支持中文
import numpy as np

#初始化顏色
color = ['red', 'black', 'blue', 'pink', 'purple', 'green', 'yellow', 'orange', '#d00F0d']
#初始化圖框
figure, [(ax1, ax2, ax3), (ax4, ax5, ax6), (ax7, ax8, ax9) ] = plt.subplots(3, 3)

#畫圖烹困,設(shè)置標簽,標題
for i, j in zip([ax1, ax2, ax3, ax4, ax5, ax6, ax7, ax8, ax9], np.arange(9)):
    i.plot(np.random.random(10), color=color[j])
    i.set_title('ax' + str(j+1), fontsize=25)
    i.set_xlabel('X', fontsize=15)
    i.set_ylabel('Y', fontsize=15)

figure.tight_layout()

plt.show()

畫圖結(jié)果如下:

解決方案3

2.4解決方案4

最后一種方法是在初始化子圖的時候就是定參數(shù)constrained layout=True乾吻,這樣就可以使用約束布局來調(diào)整繪圖元素的位置髓梅。類似于tight_layout拟蜻,但設(shè)計得更加靈活。示例代碼如下:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 設(shè)置支持中文
import numpy as np

#初始化顏色
color = ['red', 'black', 'blue', 'pink', 'purple', 'green', 'yellow', 'orange', '#d00F0d']
#初始化圖框
figure, [(ax1, ax2, ax3), (ax4, ax5, ax6), (ax7, ax8, ax9) ] = plt.subplots(3, 3, constrained_layout=True)  #使用約數(shù)布局

#畫圖枯饿,設(shè)置標簽酝锅,標題
for i, j in zip([ax1, ax2, ax3, ax4, ax5, ax6, ax7, ax8, ax9], np.arange(9)):
    i.plot(np.random.random(10), color=color[j])
    i.set_title('ax' + str(j+1), fontsize=25)
    i.set_xlabel('X', fontsize=15)
    i.set_ylabel('Y', fontsize=15)

plt.show()

畫圖結(jié)果如下:

解決方案4
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奢方,隨后出現(xiàn)的幾起案子搔扁,更是在濱河造成了極大的恐慌,老刑警劉巖袱巨,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阁谆,死亡現(xiàn)場離奇詭異,居然都是意外死亡愉老,警方通過查閱死者的電腦和手機场绿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫉入,“玉大人焰盗,你說我怎么就攤上這事≈淞郑” “怎么了熬拒?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長垫竞。 經(jīng)常有香客問我澎粟,道長,這世上最難降的妖魔是什么欢瞪? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任活烙,我火速辦了婚禮,結(jié)果婚禮上遣鼓,老公的妹妹穿的比我還像新娘啸盏。我一直安慰自己,他們只是感情好骑祟,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布回懦。 她就那樣靜靜地躺著,像睡著了一般次企。 火紅的嫁衣襯著肌膚如雪怯晕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天缸棵,我揣著相機與錄音贫贝,去河邊找鬼。 笑死蛉谜,一個胖子當著我的面吹牛稚晚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播型诚,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼客燕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狰贯?” 一聲冷哼從身側(cè)響起也搓,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涵紊,沒想到半個月后傍妒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡摸柄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年颤练,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驱负。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡嗦玖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跃脊,到底是詐尸還是另有隱情宇挫,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布酪术,位于F島的核電站器瘪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绘雁。R本人自食惡果不足惜橡疼,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咧七。 院中可真熱鬧衰齐,春花似錦、人聲如沸继阻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘟檩。三九已至抹缕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間墨辛,已是汗流浹背卓研。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奏赘。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓寥闪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親磨淌。 傳聞我的和親對象是個殘疾皇子疲憋,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容