1说明:
======
1.1python的matplotlib画直线,看似简单,其实很难,从简单到复杂,逐步深入,小白秒懂。
1.2内容:画直线,画圆,画圆点,动画的单摆和圆套圆,好东西在后面,值得收藏。
1.3环境:
+
2静态画直线:
=======
2.1
=(-3,3,100)y=2*(x,y,'-r',label='y=2x')()
2.2图1
2.2
显示x和y坐标轴刻度起点和终点(-4,4)(-4,4)()
2.3图2:
2.4复杂一些,加入画圆、画直线和画圆点,代码如下:
第2步:画圆角度theta=(0,2*,0.01)画圆的圆弧线,因为直线很小,所以就是圆的圆弧看起来很平滑(x,y)画直线的坐标点为0,0x1=(0,3,100)y1=x1补充:画原点==圆点(0,0,marker="o",c='r')显示x和y坐标轴刻度起点和终点(-4,4)(-4,4)('Graphofcircle、linescatter')()('equal')()2.5图3:
3动态直线:
========
3.1圆和单摆,代码:
第2步:初始化画布和ax定义显示网格定义圆的半径r=3.0圆的圆弧线的x和y坐标x=r*(theta)y=r*(theta)第4步:单摆设置g=9.8无阻力函数定义defpulumno(w,t,l):th,v=wdth=vdv=-g/l*(th)returndth,dv调用scipy的一个函数odeinttrack=odeint(pulumno,(1.0,0),t,args=(r,))xdata=[r*(track[i,0])foriinrange(len(track))]ydata=[-r*(track[i,0])foriinrange(len(track))]初始化函数definit():_xlim(-4,4)_ylim(-4,4)returnline,提示0,0为直线的圆点坐标是不变的newx=[0,xdata[i]]newy=[0,ydata[i]]_data(newx,newy)returnline,第1步:导入模块注意动画需要这个,静态图片可以省略,采用默认fig,ax=()()第3步:画圆角度theta=(0,2*,0.01)画圆的圆弧线(x,y)半径直线数据xdata=[r*(theta[i])foriinrange(len(theta))]ydata=[r*(theta[i])foriinrange(len(theta))]初始化函数definit():_xlim(-4,4)_ylim(-4,4)returnline,提示0,0为直线的圆点坐标是不变的newx=[0,xdata[i]]newy=[0,ydata[i]]_data(newx,newy)returnline,第1步:导入模块注意动画需要这个,静态图片可以省略,采用默认fig,ax=()()第3步:画圆角度theta=(0,2*,0.01)水平向左移动4个单位x=-4+r*(theta)y=r*(theta)第4步:画线设置画半径直线line,=([],[],'o-',lw=2)cos波动线linecos,=([],[],lw=2)sin和cos线_data([],[])_data([],[])returnline,linesin,linecos,提示0,0为直线的圆点坐标是不变的newx=[-4,xdata[i]]newy=[0,ydata[i]]_data(newx,newy)+1就是水平向右移动1个单位cosx=1+(0,4,1000)cosy=-2+(2**(*i))_data(cosx,cosy)returnline,linesin,linecos,第1步:导入模块注意动画需要这个,静态图片可以省略,采用默认fig,ax=()()第3步:画圆角度,0.01越小,速度越慢theta=(0,2*,0.01)水平向左移动4个单位x=-4+r*(theta)y=r*(theta)第4步:直线设置画半径直线line,=([],[],'o-',lw=2)cos波动线linecos,=([],[],lw=2,label='cos')水平线==lineshui==xs和ysxs=(-6,6,100)ys=[0]*len(xs)(xs,ys,'-b',label='lineshui')初始化函数definit():_xlim(-4,4)_ylim(-4,4)sin和cos的连接线_data([],[])_data([],[])returnline,linesin,linecos,linesinl,linecosl,提示-4,0为直线的圆点坐标是不变的newx=[-4,xdata[i]]newy=[0,ydata[i]]+1就是水平向右移动1个单位sinx=1+(0,4,1000)siny=2+(2**(*i))+1就是水平向右移动1个单位cosx=1+(0,4,1000)cosy=-2+(2**(*i))sin连接线,_data(newxsinl,newysinl)newxcosl=[1,xdata[i]]newycosl=[cosy[i],ydata[i]]第5步:相关设置('Graphofcircle、radius、sincos')('equal')ani=(fig,update,range(1,len(xdata)),init_func=init,interval=10)(loc='upperright')()6.2效果图:
小bug,留下,可以试试如何改进