matplotlib subplot画子图

以下图为例:在一个figure上有三个图:

plt.subplot(221) #表示有2行2列第一个图
plt.plot(x1,y1)  
plt.subplot(222)  #表示有2行2列第二个图
plt.loglog(x2,y2)
plt.subplot(212)
plt.loglog(x3,y3)

plt.show()

上面的前两个都好理解,plt.subplot(212)比较不好理解。
因为第三个图实际上是占用了(223)和(224)两个图的位置;现在规定当出现这种一个图占多个图位置时要重新划分,相当于是(211)和(212),即2行1列,而(211)已经被第一第二个图占了(此时要把它们一起看成一列),现在是(212)表示第2行第1列第2个图。
matplotlib subplot画子图_第1张图片
当然,更方便的是使用(参考:https://blog.csdn.net/kepengs/article/details/84886457)

fig,ax = plt.subplots()

等价于

fig = plt.figure()
ax = fig.add_subplot(1,1,1)

这样就不用每次画图都先写plt.figure()了
完整代码如下,计算的是黑体谱

import numpy as np 
import matplotlib.pyplot as plt
import pysm

def Bv(nu, T):
    kB = 1.3806505*10**(-23)  # J/K
    h = 6.6260693*10**(-34+9)  # J·s, dimension becomes J/GHz by plus 9
    c = 299792458
    return 2*h*nu**3/c**2*1/(np.exp(h*nu/(kB*T))-1)

# plot CMB power spectrum
Tcmb = 2.725
nu = np.arange(10,1000)
CMB_power_spect = Bv(nu,Tcmb)
# get max value of Bv and corresponding value of nu;
max_Bv = max(CMB_power_spect)
max_ind = list(CMB_power_spect).index(max_Bv)
max_Bv_to_nu = nu[max_ind]
print("maximun value:>>>(%e,%d)"%(max_Bv,max_Bv_to_nu))
# subplot
plt.figure() #这句可有可无
plt.subplot(221)
plt.plot(nu,CMB_power_spect)
plt.subplot(222)
plt.loglog(nu,CMB_power_spect)
plt.subplot(212)
plt.loglog(nu,CMB_power_spect*10**26*pysm.common.convert_units('Jysr','uK_RJ',nu))

plt.show()

你可能感兴趣的:(python,matplotlib)