1说明: 1。1python的matplotlib画直线,看似简单,其实很难,从简单到复杂,逐步深入,小白秒懂。 1。2内容:画直线,画圆,画圆点,动画的单摆和圆套圆,好东西在后面,值得收藏。 1。3环境: python3。8matplotlib3。2。0 2静态画直线: 2。1line1。pyimportmatplotlib。pyplotaspltimportnumpyasnpxnp。linspace(3,3,100)y2xplt。plot(x,y,r,labely2x)plt。show() 2。2图1 2。2line2。pyimportmatplotlib。pyplotaspltimportnumpyasnp坐标点为0,0xnp。linspace(0,3,100)yxplt。plot(x,y,r,labelyx)显示x和y坐标轴刻度起点和终点plt。xlim(4,4)plt。ylim(4,4)plt。show() 2。3图2: 2。4复杂一些,加入画圆、画直线和画圆点,代码如下:第1步:导入模块importmatplotlib。pyplotaspltimportnumpyasnp第2步:画圆定义圆的半径r3。0角度thetanp。arange(0,2np。pi,0。01)圆的圆弧线的x和y坐标xrnp。cos(theta)yrnp。sin(theta)画圆的圆弧线,因为直线很小,所以就是圆的圆弧看起来很平滑plt。plot(x,y)第3步:画直线画直线的坐标点为0,0x1np。linspace(0,3,100)y1x1画直线plt。plot(x1,y1,r)补充:画原点圆点plt。scatter(0,0,markero,cr)第4步:相关设置显示x和y坐标轴刻度起点和终点plt。xlim(4,4)plt。ylim(4,4)plt。title(Graphofcircle、linescatter)plt。grid()plt。axis(equal)plt。show() 2。5图3: 3动态直线: 3。1圆和单摆,代码:第1步:导入模块importnumpyasnpfromscipy。integrateimportodeintimportmatplotlib。pyplotaspltimportmatplotlib。animationasanimation第2步:初始化画布和ax定义注意动画需要这个,静态图片可以省略,采用默认fig,axplt。subplots()ax。grid()显示网格第3步:画圆定义圆的半径r3。0角度thetanp。arange(0,2np。pi,0。01)圆的圆弧线的x和y坐标xrnp。cos(theta)yrnp。sin(theta)画圆的圆弧线plt。plot(x,y)第4步:单摆设置g9。8重力无阻力函数定义defpendulumno(w,t,l):th,vwdthvdvglnp。sin(th)returndth,dv2020秒tnp。arange(0,20,0。1)调用scipy的一个函数odeinttrackodeint(pendulumno,(1。0,0),t,args(r,))xdata〔rnp。sin(track〔i,0〕)foriinrange(len(track))〕ydata〔rnp。cos(track〔i,0〕)foriinrange(len(track))〕画单摆线line,ax。plot(〔〕,〔〕,o,lw2)初始化函数definit():ax。setxlim(4,4)ax。setylim(4,4)returnline,刷新函数defupdate(i):提示0,0为直线的圆点坐标是不变的newx〔0,xdata〔i〕〕newy〔0,ydata〔i〕〕line。setdata(newx,newy)returnline,第5步:相关设置plt。title(Graphofcirclependulumno)plt。axis(equal)anianimation。FuncAnimation(fig,update,range(1,len(xdata)),initfuncinit,interval50)plt。show() 3。2效果图: 4圆和可转动的半径: 4。1代码:第1步:导入模块importnumpyasnpimportmatplotlib。pyplotaspltimportmatplotlib。animationasanimation第2步:初始化画布和ax定义注意动画需要这个,静态图片可以省略,采用默认fig,axplt。subplots()ax。grid()显示网格第3步:画圆定义圆的半径r3。0角度thetanp。arange(0,2np。pi,0。01)圆的圆弧线的x和y坐标xrnp。cos(theta)yrnp。sin(theta)画圆的圆弧线plt。plot(x,y)第4步:单摆设置半径直线数据xdata〔rnp。sin(theta〔i〕)foriinrange(len(theta))〕ydata〔rnp。cos(theta〔i〕)foriinrange(len(theta))〕画半径直线line,ax。plot(〔〕,〔〕,o,lw2)初始化函数definit():ax。setxlim(4,4)ax。setylim(4,4)returnline,刷新函数defupdate(i):提示0,0为直线的圆点坐标是不变的newx〔0,xdata〔i〕〕newy〔0,ydata〔i〕〕line。setdata(newx,newy)returnline,第5步:相关设置plt。title(Graphofcircleradius)plt。axis(equal)anianimation。FuncAnimation(fig,update,range(1,len(xdata)),initfuncinit,interval10)plt。show() 4。2效果图: 再复杂一些 5加入sin和cos: 5。1代码:第1步:导入模块importnumpyasnpimportmatplotlib。pyplotaspltimportmatplotlib。animationasanimation第2步:初始化画布和ax定义注意动画需要这个,静态图片可以省略,采用默认fig,axplt。subplots()ax。grid()显示网格第3步:画圆定义圆的半径r3。0角度thetanp。arange(0,2np。pi,0。01)圆的圆弧线的x和y坐标水平向左移动4个单位x4rnp。cos(theta)yrnp。sin(theta)画圆的圆弧线plt。plot(x,y)第4步:画线设置半径直线数据xdata〔4rnp。sin(theta〔i〕)foriinrange(len(theta))〕ydata〔rnp。cos(theta〔i〕)foriinrange(len(theta))〕画半径直线line,ax。plot(〔〕,〔〕,o,lw2)sin波动线linesin,ax。plot(〔〕,〔〕,lw2)cos波动线linecos,ax。plot(〔〕,〔〕,lw2)初始化函数definit():ax。setxlim(4,4)ax。setylim(4,4)sin和cos线linesin。setdata(〔〕,〔〕)linecos。setdata(〔〕,〔〕)returnline,linesin,linecos,刷新函数defupdate(i):提示0,0为直线的圆点坐标是不变的newx〔4,xdata〔i〕〕newy〔0,ydata〔i〕〕line。setdata(newx,newy)1就是水平向右移动1个单位sinx1np。linspace(0,4,1000)siny2np。sin(2np。pi(sinx0。01i))linesin。setdata(sinx,siny)1就是水平向右移动1个单位cosx1np。linspace(0,4,1000)cosy2np。cos(2np。pi(cosx0。01i))linecos。setdata(cosx,cosy)returnline,linesin,linecos,第5步:相关设置plt。title(Graphofcircle、radius、sincos)plt。axis(equal)anianimation。FuncAnimation(fig,update,range(1,len(xdata)),initfuncinit,interval10)plt。show() 5。2效果图: 再画直线怎么办? 6再复杂些: 6。1代码:第1步:导入模块importnumpyasnpimportmatplotlib。pyplotaspltimportmatplotlib。animationasanimation第2步:初始化画布和ax定义注意动画需要这个,静态图片可以省略,采用默认fig,axplt。subplots()ax。grid()显示网格第3步:画圆定义圆的半径r3。0角度,0。01越小,速度越慢thetanp。arange(0,2np。pi,0。01)圆的圆弧线的x和y坐标水平向左移动4个单位x4rnp。cos(theta)yrnp。sin(theta)画圆的圆弧线plt。plot(x,y)第4步:直线设置半径直线数据xdata〔4rnp。sin(theta〔i〕)foriinrange(len(theta))〕ydata〔rnp。cos(theta〔i〕)foriinrange(len(theta))〕画半径直线line,ax。plot(〔〕,〔〕,o,lw2)sin波动线linesin,ax。plot(〔〕,〔〕,lw2,labelsin)cos波动线linecos,ax。plot(〔〕,〔〕,lw2,labelcos)连接sin和cos的线linesinl,ax。plot(〔〕,〔〕,o,lw2,labelsinline)linecosl,ax。plot(〔〕,〔〕,o,lw2,labelcosline)水平线lineshuixs和ysxsnp。linspace(6,6,100)ys〔0〕len(xs)plt。plot(xs,ys,b,labellineshui)垂直线linechuixc和ycycnp。linspace(4,4,100)xc〔0〕len(yc)plt。plot(xc,yc,y,labellinechui)初始化函数definit():ax。setxlim(4,4)ax。setylim(4,4)sin和cos的动态波动线linesin。setdata(〔〕,〔〕)linecos。setdata(〔〕,〔〕)sin和cos的连接线linesinl。setdata(〔〕,〔〕)linecosl。setdata(〔〕,〔〕)returnline,linesin,linecos,linesinl,linecosl,刷新函数defupdate(i):提示4,0为直线的圆点坐标是不变的newx〔4,xdata〔i〕〕newy〔0,ydata〔i〕〕圆的半径直线line。setdata(newx,newy)1就是水平向右移动1个单位sinx1np。linspace(0,4,1000)siny2np。sin(2np。pi(sinx0。01i))sin波动线linesin。setdata(sinx,siny)1就是水平向右移动1个单位cosx1np。linspace(0,4,1000)cosy2np。cos(2np。pi(cosx0。01i))cos波动线linecos。setdata(cosx,cosy)newxsinl〔1,xdata〔i〕〕newysinl〔siny〔i〕,ydata〔i〕〕sin连接线,buglinesinl。setdata(newxsinl,newysinl)newxcosl〔1,xdata〔i〕〕newycosl〔cosy〔i〕,ydata〔i〕〕cos连接线,buglinecosl。setdata(newxcosl,newycosl)returnline,linesin,linecos,linesinl,linecosl,第5步:相关设置plt。title(Graphofcircle、radius、sincos)plt。axis(equal)anianimation。FuncAnimation(fig,update,range(1,len(xdata)),initfuncinit,interval10)plt。legend(locupperright)plt。show() 6。2效果图: 小bug,留下,可以试试如何改进