1. 直接指定
2. 動(dòng)態(tài)增加
直接指定是在創(chuàng)建figure的時(shí)候,就直接定義好多個(gè)axes的排列方式;動(dòng)態(tài)增加則是根據(jù)需要在figure上添加axes。下面來(lái)具體看下用法
1. 直接指定
直接指定可以通過(guò)pyplot子模塊的subplots函數(shù)來(lái)實(shí)現(xiàn),基本用法如下
>>> fig, axes = plt.subplots()
>>> axes
<matplotlib.axes._subplots.AxesSubplot object at 0x0A149E68>
>>> fig, axes = plt.subplots(2,2)
>>> axes
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x0106DBE0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x01087580>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x01099808>,
<matplotlib.axes._subplots.AxesSubplot object at 0x010BB1F0>]],
dtype=object)
>>> axes[0, 0]
<matplotlib.axes._subplots.AxesSubplot object at 0x0106DBE0>
>>> axes[0, 1]
<matplotlib.axes._subplots.AxesSubplot object at 0x01087580>
>>> axes[1, 0]
<matplotlib.axes._subplots.AxesSubplot object at 0x01099808>
>>> axes[1, 1]
<matplotlib.axes._subplots.AxesSubplot object at 0x010BB1F0>
>>> fig, (ax1, ax2) = plt.subplots(1, 2)
>>> fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
這種方式生成的每個(gè)axes都是大小相同的,代碼如下
>>> fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
>>> ax1.plot([1,2,3,4])
>>> ax2.bar(x = [1, 2, 3, 4], height = [4, 2, 3, 1])
>>> ax3.hist(x = np.random.normal(size=1000), bins=50)
>>> ax4.scatter(x= np.random.randn(10), y=np.random.randn(10),s=40 * np.arange(10),c=np.random.randn(10))
>>> plt.show()
輸出結(jié)果如下
2. 動(dòng)態(tài)指定
動(dòng)態(tài)指定是在生成新的axes對(duì)象的同時(shí),指定其排列的位置,通過(guò)pyplot子模塊的subplot函數(shù)來(lái)實(shí)現(xiàn),用法如下
>>> ax1 = plt.subplot(221)
>>> ax2 = plt.subplot(222)
>>> ax3 = plt.subplot(223)
>>> ax4 = plt.subplot(224)
>>>
>>> ax1.plot([1,2,3,4])
>>> ax2.bar(x = [1, 2, 3, 4], height = [4, 2, 3, 1])
>>> ax3.hist(x = np.random.normal(size=1000), bins=50)
>>> ax4.scatter(x= np.random.randn(10), y=np.random.randn(10),s=40 * np.arange(10),c=np.random.randn(10))
>>> plt.show()
上述代碼的輸出結(jié)果和直接指定方式的輸出是完全一樣的,subplot方法中,前兩個(gè)數(shù)字分別表示布局的行數(shù)和列數(shù),第三個(gè)數(shù)值表示的是索引。
另外,還有一種更加靈活的布局方式,支持不同axes占據(jù)不同區(qū)域,通過(guò)pyplot子模塊的subplot2grid函數(shù)來(lái)實(shí)現(xiàn),用法如下
>>> ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=2)
>>> ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2, rowspan=2)
>>> ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)
>>>
>>> ax1.bar(x = [1, 2, 3, 4], height = [4, 2, 3, 1])
>>> ax2.scatter(x= np.random.randn(10), y=np.random.randn(10),s=40 * np.arange(10),c=np.random.randn(10))
>>> ax3.hist(x = np.random.normal(size=1000), bins=50)
>>>
>>> plt.show()
輸出結(jié)果如下
第一個(gè)元組表示布局的行數(shù)和列數(shù),第二個(gè)元組表示axes的數(shù)組下標(biāo),colspan和rowspan分別指定該axes占據(jù)的行數(shù)和列數(shù)。為不同的axes指定不同的colspan和rowspan參數(shù),從而實(shí)現(xiàn)不同axes不同大小的目的。
本質(zhì)上來(lái)講,一頁(yè)多圖的方式都是首先將一個(gè)figure按照固定的行列劃分為相等大小的區(qū)域,只不過(guò)一個(gè)是直接利用劃分好的相等區(qū)域來(lái)畫(huà)圖,一個(gè)則另外指定了axes覆蓋的相等區(qū)域的個(gè)數(shù),,然后再進(jìn)行畫(huà)圖而已。
figuse size的大小直接影響axes區(qū)域的大小,除此之外,設(shè)置繪圖區(qū)域在figure上的范圍,以及劃分的相等區(qū)域的水平和垂直間隔,也會(huì)影響最終的畫(huà)圖區(qū)域的大小,可以通過(guò)subplots_adjust函數(shù)進(jìn)行設(shè)置,用法如下
>>> fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
>>> plt.subplots_adjust(left=0.25, right=0.9, bottom=0.1, top=0.9, wspace=0.2, hspace=0.2)
將figure視為左下角為(0,0), 右上角為(1, 1)的坐標(biāo)系,通過(guò)left等參數(shù)分別指定上下左右的坐標(biāo),從而設(shè)置繪圖區(qū)域的大小。wspace和hspace參數(shù)分別指定分割線的寬度和高度,其數(shù)值為每個(gè)axes width和height的比例。
通過(guò)pyplot的subplots系列函數(shù),可以輕松實(shí)現(xiàn)一頁(yè)多圖,當(dāng)然,在matplotlib中,還有其他方法來(lái)實(shí)現(xiàn)一頁(yè)多圖,具體的可以查看官方的幫助文檔。
·end·
聯(lián)系客服