首先補充一下:兩種體系7種顏色 r g b y m c k (紅,綠,藍,黃,品紅,青,黑)
在科研的過程中,座標系中的XY不一定就是等尺度的。例如在聲波中對Y軸取對數。肆意我們也必須知道這種座標系如何畫出來的。
1:對數座標圖
有3個函數可以實現這種功能,分別是:semilogx(),semilogy(),loglog()。它們分別表示對X軸,Y軸,XY軸取對數。下面在一個2*2的figure裏面來比較這四個子圖(還有plot())。
- def drawsemilogx():
- w=np.linspace(0.1,1000,1000)
- p=np.abs(1/(1+0.1j*w))
- plt.subplot(221)
- plt.plot(w,p,lw=2)
- plt.xlabel('X')
- plt.ylabel('y');
- plt.subplot(222)
- plt.semilogx(w,p,lw=2)
- plt.ylim(0,1.5)
- plt.xlabel('log(X)')
- plt.ylabel('y')
- plt.subplot(223)
- plt.semilogy(w,p,lw=2)
- plt.ylim(0,1.5)
- plt.xlabel('x')
- plt.xlabel('log(y)')
- plt.subplot(224)
- plt.loglog(w,p,lw=2)
- plt.ylim(0,1.5)
- plt.xlabel('log(x)')
- plt.xlabel('log(y)')
- plt.show()
2,極座標圖像
極座標系中的點由一個夾角和一段相對於中心位置的距離來表示。其實在plot()函數裏面本來就有一個polar的屬性,讓他爲True就行了。下面繪製一個極座標圖像:
- def drawEightFlower():
- theta=np.arange(0,2*np.pi,0.02)
- plt.subplot(121,polar=True)
- plt.plot(theta,2*np.ones_like(theta),lw=2)
- plt.plot(theta,theta/6,'--',lw=2)
- plt.subplot(122,polar=True)
- plt.plot(theta,np.cos(5*theta),'--',lw=2)
- plt.plot(theta,2*np.cos(4*theta),lw=2)
- plt.rgrids(np.arange(0.5,2,0.5),angle=45)
- plt.thetagrids([0,45,90]);
- plt.show();
整個代碼很好理解,在後面的13,14行沒見過。第一個plt.rgrids(np.arange(0.5,2,0.5),angle=45) 表示繪製半徑爲0.5 1.0 1.5的三個同心圓,同時將這些半徑的值標記在45度位置的那個直徑上面。plt.thetagrids([0,45,90]) 表示的是在theta爲0,45,90度的位置上標記上度數。得到的圖像是:
3,柱狀圖:
核心代碼matplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, **kwargs)裏面重要的參數是左邊起點,高度,寬度。下面例子:
- def drawPillar():
- n_groups = 5;
- means_men = (20, 35, 30, 35, 27)
- means_women = (25, 32, 34, 20, 25)
- fig, ax = plt.subplots()
- index = np.arange(n_groups)
- bar_width = 0.35
- opacity = 0.4
- rects1 = plt.bar(index, means_men, bar_width,alpha=opacity, color='b',label= 'Men')
- rects2 = plt.bar(index + bar_width, means_women, bar_width,alpha=opacity,color='r',label='Women')
- plt.xlabel('Group')
- plt.ylabel('Scores')
- plt.title('Scores by group and gender')
- plt.xticks(index + bar_width, ('A', 'B', 'C', 'D', 'E'))
- plt.ylim(0,40);
- plt.legend();
- plt.tight_layout();
- plt.show();
得到的圖像是:
再貼一圖:
這是我關於pose識別率的實驗結果,感覺結果真是令人不可思議!(非博主原文!)
- def drawBarChartPoseRatio():
- n_groups = 5
- means_VotexF36 = (0.84472049689441, 0.972477064220183, 1.0, 0.9655172413793104, 0.970970970970971)
- means_VotexF50 = (1.0, 0.992992992992993, 1.0, 0.9992348890589136, 0.9717125382262997)
- means_VFH36 = (0.70853858784893, 0.569731081926204, 0.8902900378310215, 0.8638638638638638, 0.5803008248423096)
- means_VFH50 = (0.90786948176583, 0.796122576610381, 0.8475120385232745, 0.8873762376237624, 0.5803008248423096)
- fig, ax = plt.subplots()
- index = np.arange(n_groups)
- bar_width = 0.3
- opacity = 0.4
- rects1 = plt.bar(index, means_VFH36, bar_width/2, alpha=opacity, color='r', label='VFH36' )
- rects2 = plt.bar(index+ bar_width/2, means_VFH50, bar_width/2, alpha=opacity, color='g', label='VFH50' )
- rects3 = plt.bar(index+bar_width, means_VotexF36, bar_width/2, alpha=opacity, color='c', label='VotexF36')
- rects4 = plt.bar(index+1.5*bar_width, means_VotexF50, bar_width/2, alpha=opacity, color='m', label='VotexF50')
- plt.xlabel('Category')
- plt.ylabel('Scores')
- plt.title('Scores by group and Category')
- #plt.xticks(index - 0.2+ 2*bar_width, ('balde', 'bunny', 'dragon', 'happy', 'pillow'))
- plt.xticks(index - 0.2+ 2*bar_width, ('balde', 'bunny', 'dragon', 'happy', 'pillow'),fontsize =18)
- plt.yticks(fontsize =18) #change the num axis size
- plt.ylim(0,1.5) #The ceil
- plt.legend()
- plt.tight_layout()
- plt.show()
柱狀圖顯示:
4:散列圖,由離散的點構成的。
函數是:
matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, hold=None,**kwargs),其中,xy是點的座標,s點的大小,maker是形狀可以maker=(5,1)5表示形狀是5邊型,1表示是星型(0表示多邊形,2放射型,3圓形);alpha表示透明度;facecolor=‘none’表示不填充。例子如下:
- def drawStar():
- plt.figure(figsize=(8,4))
- x=np.random.random(100)
- y=np.random.random(100)
- plt.scatter(x,y,s=x*1000,c='y',marker=(5,1),alpha=0.5,lw=2,facecolors='none')
- plt.xlim(0,1)
- plt.ylim(0,1)
- plt.show()
上面代碼的facecolors參數使得前面的c=‘y’不起作用了。圖像:
5,3D圖像,主要是調用3D圖像庫。看下面的例子:
- def draw3Dgrid():
- x,y=np.mgrid[-2:2:20j,-2:2:20j]
- z=x*np.exp(-x**2-y**2)
- ax=plt.subplot(111,projection='3d')
- ax.plot_surface(x,y,z,rstride=2,cstride=1,cmap=plt.cm.coolwarm,alpha=0.8)
- ax.set_xlabel('x')
- ax.set_ylabel('y')
- ax.set_zlabel('z')
- plt.show()
得到的圖像如下圖所示:
到此,matplotlib基本操作的學習結束了,相信大家也可以基本完成自己的科研任務了。下面將繼續學習python的相關課程,請繼續關注。
參考書目:
《python科學計算》
《matplotlib手冊》
原文鏈接:http://blog.csdn.net/ikerpeng/article/details/20523679
參考資料:http://matplotlib.org/gallery.html matplotlib畫廊
有少量修改,如有疑問,請訪問原作者!
轉自:http://blog.csdn.net/ikerpeng/article/details/20523679