python--matplotlib庫使用3

weixin_30488085發表於2020-04-06

解決問題:

1 一張畫布畫多個子圖

2 matplotlib繪圖中文不能顯示問題

3 線繪圖函式plt.plot()與散點繪圖函式plt.scatter()之間的區別

 

  上程式碼:

 1 #lwlr繪圖比較3個yHat(k取1,0.01,0.003)
 2 def lwlrPlot3(xArr,yArr):               #輸入:xArr是n×d矩陣/陣列/列表;yArr是n×1
 3 
 4     xMat=mat(xArr)
 5     srtInd=xMat[:,1].argsort(0)         #等價於argsort(xMat[:,1],0)
 6     xSort=xMat[srtInd][:,0,:]           #等價於xMat[srtInd.flatten().A[0]] 
 7 
 8     yHat1=lwlrTest(xArr,xArr,yArr,1)    #呼叫區域性加權迴歸(lwlr)主函式
 9     yHat2=lwlrTest(xArr,xArr,yArr,0.01)
10     yHat3=lwlrTest(xArr,xArr,yArr,0.03)
11 
12     fig=plt.figure()
13     ax1=fig.add_subplot(311)
14     ax2=fig.add_subplot(312)
15     ax3=fig.add_subplot(313)
16 
17     #畫直線圖需要排序
18     #直線圖plt.plot(),plot前要排序
19     #ax1.plot(xMat[:,1],yHat[:].T)
20     ax1.plot(xSort[:,1],yHat1[srtInd]) 
21     ax2.plot(xSort[:,1],yHat2[srtInd])
22     ax3.plot(xSort[:,1],yHat3[srtInd])
23 
24     #畫散點圖不需要排序,plt.scatter()
25     ax1.scatter(xMat[:,1].flatten().A[0],mat(yArr).T.flatten().A    [0],s=2,c='r',label=u'欠擬合')  
26     ax2.scatter(xMat[:,1].flatten().A[0],mat(yArr).T.flatten().A[0],s=2,c='r',label=u'最好')
27     ax3.scatter(xMat[:,1].flatten().A[0],mat(yArr).T.flatten().A[0],s=2,c='r',label=u'過擬合')
28 
29     ax1.legend(loc='upper left')
30     ax2.legend(loc='upper left')
31     ax3.legend(loc='upper left')
32 
33     plt.show()

  注意:1 程式碼中呼叫了區域性加權迴歸主函式"lwlrTest()",參見"python--區域性加權迴歸"
          2 為了解決繪圖時中文顯示亂碼問題,需在程式碼前端加入以下三行程式碼:

1 '''
2 解決python matplotlib畫圖無法顯示中文的問題!
3 '''
4 from pylab import *
5 mpl.rcParams['font.sans-serif']=['SimHei']
6 mpl.rcParams['axes.unicode_minus']=False

  繪圖結果:

轉載於:https://www.cnblogs.com/cygalaxy/p/6810134.html

相關文章