数据读取、写入、保存
- 第一行导入集成工具包,如pyplot(画图)、numpy(矩阵分析)、xlrd(读取Excel文件)、xlwt(创建、写入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表,参数0打开sheet1,参数1打开sheet2...:
table=data.sheet_by_index(0)
- 指定读取sheet表中某一整行或某一整列数据,参数0读取第一行(列),参数2读取第二行(列)...:
row=table.row_values(0)
col=table.col_values(0)
- 指定读取某一单元格内的数据,例如读取第5行第8列所在单元格内的数据:
b=table.cell(5,8).value
- 获取打开的sheet表中有多少行或多少列数据:
i=len(row)
j=len(col)
- Excel文件的创建和写入
- 使用xlwt创建名为ov2的Excel文件,注意后缀格式为.xls,不支持.xlsx格式:
book=xlwt.Workbook('C:/Users/th/Desktop/ov2.xls')
- 在已创建的Excel表ov2.xls中新建sheet1:
sheet=book.add_sheet('sheet1',cell_overwrite_ok=True)
- 向已创建的sheet表的第a行第i列写入数据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基本函数
画图参数
- plt.plot线图
- label图例内容
- linewidth粗细
- color颜色,参数可为单字母'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列数据,将这10列数据依次放入列表y中,然后用plt.violinplot函数做成小提琴图,小提琴图宽度表示概率大小,showmeans表示是否显示平均值,showmedians表示是否显示中位数,showextrema=False表示是否显示类似error bar的极端线,下面的for循环设定了小提琴图的面颜色、边框颜色及透明度:
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个角度数据在极坐标中以散点的形式显示,通过for循环将该列每一项数据都除180再乘pi,转化为以pi表示的角度,依次存入Theta列表中,使用projection='polar'声明生成极坐标图,再用scatter函数在生成的极坐标系中作图,其中Theta为角度数据列表,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',用数字表示不需加单引号)
- fontsize图例字体大小
- frameon=False去掉图例边框
- edgecolor='blue'图例边框颜色
- facecolor='green'图例背景颜色
- title='figure 1 legend'图例标题
plt.legend(loc='lower left',fontsize=15)
- **