1. 程式人生 > >使用pyplot在一張畫布上繪製多個子圖的python指令碼

使用pyplot在一張畫布上繪製多個子圖的python指令碼

#coding=utf8

import matplotlib.pyplot as plt
import numpy as np

#建立陣列:x、y1、y2、y3、x4、y4
x = np.array([10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5])
y1 = np.array([8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68])
y2 = np.array([9.14, 8.14, 8.74, 8.77, 9.26, 8.10, 6.13, 3.10, 9.13, 7.26, 4.74])
y3 = np.array([7.46, 6.77, 12.74, 7.11, 7.81, 8.84, 6.08, 5.39, 8.15, 6.42, 5.73])
x4 = np.array([8, 9, 8,10, 8, 6, 8, 19, 3.8, 8,4.8])
y4 = np.array([6.8, 5.6, 7.1, 8.84, 8.7, 7.04, 5.5, 1.50, 5.6, 7.9, 6.88])


def fit(x):
    return 1+ 4 * x/5

#建立xfit陣列,該陣列包含兩個元素:x的最大值和最小值
xfit = np.array([np.min(x), np.max(x)])

#建立子圖
plt.subplot(221)
#在第一張子圖上繪製兩個圖形
#x,y1的散點圖,黑色方塊
#xfit,fit(xfit)紅色實線,線寬為2
plt.plot(x, y1, 'ks', xfit, fit(xfit), 'r-', lw=2)
#設定x軸範圍:2到20
#設定y軸範圍:2到14
plt.axis([2, 20, 2, 14])
#plt.gca():獲取當前子圖
#plt.setp():設定圖示例項的屬性。
#設定子圖的xticklabels為空
#yticks顯示為:4、8、12,,xticks顯示:0、 10  、20
plt.setp(plt.gca(), xticklabels=[], yticks=(4, 8, 12), xticks=(0, 10, 20))

#matplotlib.pyplot.text(x, y, s, fontdict=None, withdash=False, **kwargs)
# 第一個引數是x軸座標  
# 第二個引數是y軸座標  
# 第三個引數是要顯式的內容  
#fontsize設定顯示字型大小
plt.text(3, 12, 'I', fontsize=20)

#建立第二個子圖
plt.subplot(222)
#繪製兩個圖形
#x,y2的散點圖,黑色方塊
#xfit,fit(xfit)紅色實線,線寬為2
plt.plot(x, y2, 'ks', xfit, fit(xfit), 'r-', lw=2)
plt.axis([2, 20, 2, 14])
#plt.gca():獲取當前子圖
#plt.setp():設定圖示例項的屬性。
#設定子圖的xticklabels、yticklabels為空
#yticks顯示為:4, 8, 12,,xticks顯示:0、 10  、20
plt.setp(plt.gca(), xticks=(0, 10, 20), xticklabels=[],
         yticks=(4, 8, 12), yticklabels=[], )
plt.text(3, 12, 'II', fontsize=20)

plt.subplot(223)
plt.plot(x, y3, 'ks', xfit, fit(xfit), 'r-', lw=2)
plt.axis([2, 20, 2, 14])
plt.setp(plt.gca(), yticks=(4, 8, 12), xticks=(0, 10, 20))
plt.text(3, 12, 'III', fontsize=20)


plt.subplot(224)
xfit = np.array([np.min(x4), np.max(x4)])
plt.plot(x4, y4, 'ks', xfit, fit(xfit), 'r-', lw=2)
plt.axis([2, 20, 2, 14])
plt.setp(plt.gca(), yticklabels=[], yticks=(4, 8, 12), xticks=(0, 10, 20))
plt.text(3, 12, 'IV', fontsize=20)

# 驗證統計資料
pairs = (x, y1), (x, y2), (x, y3), (x4, y4)

#corrcoef函式
#計算兩組數的相關係數
#返回結果為矩陣,第i行第j列的資料表示第i組數與第j組數的相關係數。對角線為1
for x, y in pairs:
    print 'mean=%1.2f, std=%1.2f, r=%1.2f' % (np.mean(y), np.std(y),np.corrcoef(x, y)[0][1])

#顯示繪製圖像
plt.show()