數(shù)據(jù)讀取、寫入、保存
- 第一行導入集成工具包,如pyplot(畫圖)、numpy(矩陣分析)、xlrd(讀取Excel文件)、xlwt(創(chuàng)建、寫入Excel文件):
import matplotlib.pyplot as plt
import numpy as np
import xlrd
import xlwt
-
設定保存圖片尺寸和分辨率
生成20×9.76英寸,dpi為960的圖片,圖片分辨率為20×960-9.76×960=19200×9389.12
plt.figure(figsize=(20,9.76),dpi=960)
- Excel文件的讀取
- 打開要讀取的Excel文件:
data=xlrd.open_workbook('C:/Users/th/Desktop/ov1.xlsx')
- 指定打開哪個sheet表,參數(shù)0打開sheet1,參數(shù)1打開sheet2...:
table=data.sheet_by_index(0)
- 指定讀取sheet表中某一整行或某一整列數(shù)據(jù),參數(shù)0讀取第一行(列),參數(shù)2讀取第二行(列)...:
row=table.row_values(0)
col=table.col_values(0)
- 指定讀取某一單元格內的數(shù)據(jù),例如讀取第5行第8列所在單元格內的數(shù)據(jù):
b=table.cell(5,8).value
- 獲取打開的sheet表中有多少行或多少列數(shù)據(jù):
i=len(row)
j=len(col)
- Excel文件的創(chuàng)建和寫入
- 使用xlwt創(chuàng)建名為ov2的Excel文件,注意后綴格式為.xls,不支持.xlsx格式:
book=xlwt.Workbook('C:/Users/th/Desktop/ov2.xls')
- 在已創(chuàng)建的Excel表ov2.xls中新建sheet1:
sheet=book.add_sheet('sheet1',cell_overwrite_ok=True)
- 向已創(chuàng)建的sheet表的第a行第i列寫入數(shù)據(jù)b:
sheet.write(a,i,b)
- 坐標軸設置
plt.axis([0.5,j+.5,-250,250])
plt.xticks([2,5,8,11,14],['217V','218H','219K','220Y','221L'],FontProperties='Times New Roman',fontsize=15)
plt.yticks(np.arange(-250,300,50),FontProperties='Times New Roman',fontsize=15)
plt.xlabel('Residues',FontProperties='Times New Roman',fontsize=15)
plt.ylabel('Dihedral(°)',FontProperties='Times New Roman',fontsize=15)
- 圖片的保存
plt.savefig('C:/Users/th/Desktop/p2.jpg',dpi=960)
Python基本函數(shù)
畫圖參數(shù)
- plt.plot線圖
- label圖例內容
- linewidth粗細
- color顏色,參數(shù)可為單字母'g'、單詞'green'、十六進制顏色代碼,如#191970
- alpha透明度,0~1,越低顏色越淺
plt.plot(x,y,label='300k-loop1',linewidth=2,color='g',alpha=0.5)
plt.plot([1,2,3],[5,7,4],label='300k-loop1',linewidth=2,color='g',alpha=0.5)
-
plt.violinplot小提琴圖
Excel表中有10列數(shù)據(jù),將這10列數(shù)據(jù)依次放入列表y中,然后用plt.violinplot函數(shù)做成小提琴圖,小提琴圖寬度表示概率大小,showmeans表示是否顯示平均值,showmedians表示是否顯示中位數(shù),showextrema=False表示是否顯示類似error bar的極端線,下面的for循環(huán)設定了小提琴圖的面顏色、邊框顏色及透明度:
y=[]
for i in range(0,10):
col=table.col_values(i)
y.append(col)
parts=plt.violinplot(y,showmeans=False,showmedians=False,showextrema=False)
for pc in parts['bodies']:
pc.set_facecolor('r')
pc.set_edgecolor('r')
pc.set_alpha(0.5)
-
極坐標散點圖
將Excel表中第20列的500個角度數(shù)據(jù)在極坐標中以散點的形式顯示,通過for循環(huán)將該列每一項數(shù)據(jù)都除180再乘pi,轉化為以pi表示的角度,依次存入Theta列表中,使用projection='polar'聲明生成極坐標圖,再用scatter函數(shù)在生成的極坐標系中作圖,其中Theta為角度數(shù)據(jù)列表,r1為散點距離極坐標圓心的距離,s=500設定散點大小,color='r'設定散點顏色,alpha=0.3設定散點透明度,最后通過plt.axis([-np.pi,np.pi,0,3.5])設定極坐標系角度范圍為-180°+180°(默認為0°360°)和半徑,通過ax.set_theta_zero_location('N')設定0°位置('N'北,'NW'西北,'W'西,'SW'西南,'S'南,'SE'東南,'E'東,'NE'東北),通過ax.set_theta_direction(-1)設定順時針(-1)還是逆時針(1),通過rlim設定比較范圍,通過rgrids設定網格
r=np.ones(500)
Theta=[]
for i in range(0,500):
r1=1r
theta=(table.cell(i,21).value)/180np.pi
Theta.append(theta)
ax=plt.subplot(111,projection='polar')
ax.scatter(Theta,r1,s=500,color='r',alpha=0.3)
plt.axis([-np.pi,np.pi,0,3.5])
plt.xticks(np.arange(-np.pi,np.pi,45/180*np.pi),('-180°','-135°','-90°','-45°','0°','45°','90°','135°',''),FontProperties='Times New Roman',fontsize=15)
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
ax.set_rlim(0,3.5)
ax.set_rgrids(np.arange(0,3.5,1),('','χ1','χ2','χ3'),FontProperties='Times New Roman',fontsize=15)
- 圖中標記線
- 在圖中標記y=3.5的直線(h表示horizontal,橫):
plt.axhline(3.5,linewidth=1,color='r')
- 在圖中標記x=3.5的直線(v表示vertical,豎):
plt.axvline(3.5,linewidth=1,color='r')
- 在圖中畫x=3.5,y軸1~2范圍的線段:
plt.axvline(3.5,ymin=1,ymax=2,linewidth=1,color='r')
- 在圖中畫一段陰影:
plt.axvspan(3.5,linewidth=1,color='r')
- 圖例legend
- loc圖例位置(0:'best',1:'upper right',2:'upper left',3:'lower left',4:'lower right',5:'right',6:'center left',7:'center right',8:'lower center',9:'upper center',10:'center',用數(shù)字表示不需加單引號)
- fontsize圖例字體大小
- frameon=False去掉圖例邊框
- edgecolor='blue'圖例邊框顏色
- facecolor='green'圖例背景顏色
- title='figure 1 legend'圖例標題
plt.legend(loc='lower left',fontsize=15)
- **