第七章:共享繪圖區域的坐標軸


1、共享單一繪圖區域的坐標軸

 1 import  matplotlib
 2 import  matplotlib.pyplot as plt
 3 import numpy as np
 4 
 5 # 顯示中文標識
 6 matplotlib.rcParams["font.sans-serif"] = ["SimHei"]
 7 matplotlib.rcParams["axes.unicode_minus"] = False
 8 
 9 # 返回一個畫布對象fig和一個坐標軸實例ax。
10 fig,ax1 = plt.subplots()
11 
12 # 自變量參數
13 t = np.arange(0.05,10.0,0.01)
14 
15 s1 = np.exp(t)                                  # 指數函數
16 ax1.plot(t,s1,c="b",ls="-")                     # 在ax1當中繪制指數函數,顏色為藍色
17 ax1.set_xlabel("X坐標軸")                       # 設置X軸標簽
18 ax1.set_ylabel("以e為底的指數函數",color="b")   # 設置Y軸標簽
19 ax1.tick_params(axis="y",color="b")             # 設置Y坐標軸的刻度為藍色
20 
21 # 創建一個與ax1共享X軸的坐標軸實例ax2,但是Y軸不共享
22 ax2 = ax1.twinx()
23 
24 s2 = np.cos(t**2)                               # 余弦函數
25 ax2.plot(t,s2,c="r",ls=":")                     # 在ax2當中繪制指數函數,顏色為紅色
26 ax2.set_ylabel("余弦函數",color="r")            # 設置Y軸標簽,因為X軸已經共享了
27 ax2.tick_params(axis="y",color="r")             # 設置Y坐標軸的刻度為紅色
28 
29 plt.show()

 

 2、共享不同子區繪圖區域的坐標軸

 1 import  matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x1 = np.linspace(0,2*np.pi,400)
 5 y1 = np.cos(x1**2)
 6 
 7 x2 = np.linspace(0.01,10,100)
 8 y2 = np.sin(x2)
 9 
10 x3 = np.random.rand(100)
11 y3 = np.linspace(0,3,100)
12 
13 x4 = np.arange(0,6,0.5)
14 y4 = np.power(x4,3)
15 
16 fig,ax = plt.subplots(2,2)
17 
18 ax1 = ax[0,0]
19 ax1.plot(x1,y1)
20 
21 ax2 = ax[0,1]
22 ax2.plot(x2,y2)
23 
24 ax3 = ax[1,0]
25 ax3.scatter(x3,y3)
26 
27 ax4 = ax[1,1]
28 ax4.scatter(x4,y4)
29 
30 plt.show()

(1) 當fig,ax = plt.subplots(2,2,sharex="all")時。

若sharex="all",4幅圖的橫坐標都采用了同一個坐標范圍;若sharey="all",4幅圖的縱坐標都采用了同一個坐標范圍

 (2) 當fig,ax = plt.subplots(2,2,sharex="none")時等價於fig,ax = plt.subplots(2,2)本身,不共享任何坐標。

 (3) 當fig,ax = plt.subplots(2,2,sharex="row")時,每一行的子分區共享橫坐標。

 (4) 當fig,ax = plt.subplots(2,2,sharex="col")時,每一列的子分區共享橫坐標。

 

 3、將共享坐標軸的子區之間的空隙去掉

 1 import  matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x = np.linspace(0.0,10.0,200)
 5 y1 = np.cos(x)*np.sin(x)
 6 y2 = np.exp(-x)*np.sin(x)
 7 y3 = 3*np.sin(x)
 8 y4 = np.power(x,0.5)
 9 
10 # 通過sharex="all"實現X軸坐標共享
11 fig,(ax1,ax2,ax3,ax4) = plt.subplots(4,1,sharex="all")
12 
13 # 將4幅圖水平區域的空隙去掉
14 fig.subplots_adjust(hspace=0)
15 
16 ax1.plot(x,y1,ls="-",lw=2,c="b")
17 ax1.set_yticks(np.arange(-0.6,0.7,0.2))
18 ax1.set_ylim(-0.7,0.7)
19 
20 ax2.plot(x,y2,ls="-",lw=2,c="r")
21 ax2.set_yticks(np.arange(-0.05,0.36,0.1))
22 ax2.set_ylim(-0.1,0.4)
23 
24 ax3.plot(x,y3,ls="-",lw=2,c="g")
25 ax3.set_yticks(np.arange(-3,4,1))
26 ax3.set_ylim(-3.5,3.5)
27 
28 ax4.plot(x,y4,ls="-",lw=2,c="c")
29 ax4.set_yticks(np.arange(0.0,3.6,0.5))
30 ax4.set_ylim(0.0,4.0)
31 
32 plt.show()

 

 4、共享個別子區繪圖區域的坐標軸

import  matplotlib.pyplot as plt
import numpy as np

x1 = np.linspace(0,2*np.pi,400)
y1 = np.cos(x1**2)

x2 = np.linspace(0.01,10,100)
y2 = np.sin(x2)

x3 = np.random.rand(100)
y3 = np.linspace(0,3,100)

x4 = np.arange(0,6,0.5)
y4 = np.power(x4,3)

fig,ax = plt.subplots(2,2)

ax1 = plt.subplot(221)
ax1.plot(x1,y1)

ax2 = plt.subplot(222)
ax1.plot(x2,y2)

ax3 = plt.subplot(223)
ax3.scatter(x3,y3)

ax4 = plt.subplot(224,sharex=ax1)    # 與第一個子區的橫坐標共享
ax4.scatter(x4,y4)

plt.show()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM