matplotlib库应用举例

来源:互联网 发布:淘宝网 阿里巴巴 编辑:程序博客网 时间:2024/06/05 10:57

最近做物理实验需要画图,顺手学习了一下matplotlib库的简单使用,做下记录.
(其中的数据是我测得,误差较大,不要参考!不要参考!)

运行环境:PyCharm+python3.5+numpy+matplotlib

第一个实验是用霍尔效应测量磁场的实验,需要在一张纸上画三个折线图,不需要进行拟合.

import numpy as npimport matplotlib.pyplot as pltplt.figure(figsize=(8.3,11.7)) #初始化图纸比例plt.subplot(221)               #指定图纸分栏中此图位置x1 = [0.50, 1.00, 1.50, 2.00, 2.50, 3.00]  #初始数据y1 = [1.04, 2.07, 3.08, 4.12, 5.14, 6.17]plt.plot(x1,y1,'ro',color="red")      #指定线或者是点的格式plt.plot(x1,y1,'-',color="black",linewidth=1)plt.xlabel("Is(mA)")               #指定下标plt.ylabel("Uh(mv)")plt.title("Uh--Is (Im=500mA)")    #指定图标标题plt.xlim(0.00,3.50)plt.ylim(0.00,7.00)plt.subplot(222)x2 = [1.00, 1.50, 2.00, 2.50, 3.00]y2 = [1.24, 1.86, 2.48, 3.10, 3.71]plt.plot(x2,y2,'ro',color="red")plt.plot(x2,y2,'-',color="black",linewidth=1)plt.xlabel("Im(mA)")plt.ylabel("Uh(mv)")plt.title("Uh--Im (Is=3mA)")plt.xlim(0.00,3.50)plt.ylim(0.00,4.00)plt.subplot(212)x3 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]y3 = [8.57, 9.89, 10.8, 11.3, 11.4, 11.4, 10.6, 9.56, 8.17, 6.61, 5.20, 3.22]plt.plot(x3,y3,'ro',color="red")plt.plot(x3,y3,'-',color="black",linewidth=1)plt.xlabel("X(mm)")plt.ylabel("B(T*e-3)")plt.title(" B--X (Is=300mA Im=500mA)")plt.xlim(-1.00,60)plt.ylim(3.00,12.00)plt.show()

结果如图:
这里写图片描述

第二个实验是单缝衍射光强分布的测定,一个图,需要将点光滑的连起来:

import numpy as npimport matplotlib.pyplot as pltfrom scipy.interpolate import splineplt.figure(figsize=(10,7))x = np.arange(-16,15.5,0.5)y = np.array(    [0.111  ,0.096, 0.101,  0.125,  0.166,  0.201,  0.246,  0.261,  0.266,  0.236,0.201,  0.17,   0.175,  0.19,   0.276,  0.409,  0.572,  0.694,  0.787,  0.777,0.72,   0.679,  0.788,  1.245,  3.535,  5.755,  6.945,  8.075,  10.635, 13.545,16.025, 17.905, 18.705, 18.505, 17.155, 15.275, 12.625, 9.285,  7.075,  4.735,2.935,  1.665,  1.025,  0.756,  0.749,  0.83,   0.832,  0.696,  0.507,  0.508,0.428,  0.31,   0.252,  0.244,  0.261,  0.279,  0.28,   0.252,  0.191,  0.163,0.129,  0.113,  0.114]);xnew = np.linspace(x.min(),x.max(),1000)power_smooth = spline(x,y,xnew) #将两点平滑的连接plot1 = plt.plot(x, y, '*',label='original values')plot2 = plt.plot(xnew, power_smooth, 'r',label='curve_fit values')plt.xlabel('x/mm')plt.ylabel('y/1e-7A')plt.legend(loc=1)       #指定legend的位置plt.hlines(0, -17, 16, linestyles = "dashed")   #画一条表示y=0的虚线plt.title('Physical work')plt.savefig('1.png')plt.show()

结果如图:
这里写图片描述

第三个实验磁场的测量,需要四个图,而且要在图中显示中文:

import numpy as npimport matplotlib.pyplot as pltfrom scipy.interpolate import splinefrom matplotlib.font_manager import *myfont = FontProperties(fname='/usr/share/fonts/truetype/wqy/wqy-microhei.ttc')  #指定字体配置(后面为你的系统中字体的位置)plt.figure(figsize=(12,12))plt.subplot(221)x1 = np.arange(-50,60,10)y1 = np.array([0.107, 0.118, 0.128, 0.136, 0.140, 0.142, 0.137,               0.131, 0.123, 0.112, 0.101])y2 = np.array([0.106, 0.117, 0.128, 0.136, 0.142, 0.144, 0.142,               0.136, 0.128, 0.117, 0.106])xnew = np.linspace(x1.min(),x1.max(),100)power_smooth1 = spline(x1,y1,xnew)power_smooth2 = spline(x1,y2,xnew)plt.plot11 = plt.plot(x1, y1, 'ro')plt.plot12 = plt.plot(xnew, power_smooth1)plt.plot21 = plt.plot(x1, y2, 'ro')plt.plot22 = plt.plot(xnew, power_smooth2)plt.xlabel('x/mm')plt.ylabel('y/mT')plt.title('单个线圈轴线',fontproperties=myfont)   #指定字体plt.xlim(-60,60)plt.ylim(0.000,0.200)plt.subplot(222)x1 = np.arange(-50,60,10)y1 = np.array([0.192, 0.197, 0.200, 0.201, 0.201, 0.201, 0.201,               0.201, 0.200, 0.197,0.192])plt.plot(x1,y1,'-')plt.plot(x1,y1,'ro')plt.xlabel('x/mm')plt.ylabel('y/mT')plt.title("双线圈轴线",fontproperties=myfont)plt.xlim(-60,60)plt.ylim(0.000,0.210)plt.subplot(223)x1 = np.arange(-30,40,10)y1 = np.array([0.201, 0.201, 0.201, 0.201, 0.201, 0.201, 0.200])plt.plot(x1,y1,'-')plt.plot(x1,y1,'ro')plt.xlabel('x/mm')plt.ylabel('y/mT')plt.title("双线圈径线",fontproperties=myfont)plt.xlim(-40,40)plt.ylim(0.000,0.210)plt.subplot(224)x1 = np.arange(20,140,10)y1 = np.array([0.194, 0.198, 0.202, 0.199, 0.200, 0.201, 0.201,               0.201, 0.199, 0.200, 0.201, 0.201])plt.plot(x1,y1,'-')plt.plot(x1,y1,'ro')plt.xlabel('x/Hz')plt.ylabel('y/mT')plt.title("坐标原点处",fontproperties=myfont)plt.xlim(0,140)plt.ylim(0.000,0.210)plt.show()

结果如图:
这里写图片描述

原创粉丝点击