1 说明:

======

1.1 python的matplotlib画直线,看似简单,其实很难,从简单到复杂,逐步深入,小白秒懂。

1.2 内容:画直线,画圆,画圆点,动画的单摆和圆套圆,好东西在后面,值得收藏。

1.3 环境:

python3.8+matplotlib3.2.0

2 静态画直线:

=======

2.1 line-1.py

import matplotlib.pyplot as pltimport numpy as npx = np.linspace(-3,3,100)y = 2*xplt.plot(x, y, '-r', label='y=2x')plt.show()

2.2 图1

2.2 line2.py

import matplotlib.pyplot as pltimport numpy as np#坐标点为0,0x = np.linspace(0,3,100)y = xplt.plot(x, y, '-r', label='y=x')#显示x和y坐标轴刻度起点和终点plt.xlim(-4, 4)plt.ylim(-4, 4)plt.show()

2.3 图2:

2.4 复杂一些,加入画圆、画直线和画圆点,代码如下:

#第1步:导入模块import matplotlib.pyplot as pltimport numpy as np#第2步:画圆#定义圆的半径r=3.0#角度theta = np.arange(0, 2*np.pi, 0.01)#圆的圆弧线的x和y坐标x =  r * np.cos(theta)y =  r * np.sin(theta)#画圆的圆弧线,因为直线很小,所以就是圆的圆弧看起来很平滑plt.plot(x, y)#第3步:画直线#画直线的坐标点为0,0x1 = np.linspace(0,3,100)y1 = x1#画直线plt.plot(x1, y1, '-r')#补充:画原点==圆点plt.scatter(0, 0, marker="o",c='r')#第4步:相关设置#显示x和y坐标轴刻度起点和终点plt.xlim(-4, 4)plt.ylim(-4, 4)plt.title('Graph of circle、line & scatter')plt.grid()plt.axis('equal')plt.show()

2.5 图3:

3 动态直线:

========

3.1 圆和单摆,代码:

#第1步:导入模块import numpy as npfrom scipy.integrate import odeintimport matplotlib.pyplot as pltimport matplotlib.animation as animation#第2步:初始化画布和ax定义#注意动画需要这个,静态图片可以省略,采用默认fig, ax = plt.subplots()ax.grid() #显示网格#第3步:画圆#定义圆的半径r=3.0#角度theta = np.arange(0, 2*np.pi, 0.01)#圆的圆弧线的x和y坐标x =  r * np.cos(theta)y =  r * np.sin(theta)#画圆的圆弧线plt.plot(x, y)#第4步:单摆设置g = 9.8  #重力 #无阻力函数定义def pendulumno(w, t, l):    th, v = w    dth = v    dv  = - g/l * np.sin(th)    return dth, dv #20==20秒t = np.arange(0, 20, 0.1)#调用scipy的一个函数odeinttrack = odeint(pendulumno, (1.0, 0), t, args=(r,))xdata = [r*np.sin(track[i, 0]) for i in range(len(track))]ydata = [-r*np.cos(track[i, 0]) for i in range(len(track))]#画单摆线line, = ax.plot([], [], 'o-', lw=2)#初始化函数def init():    ax.set_xlim(-4, 4)    ax.set_ylim(-4, 4)    return line,#刷新函数def update(i):    #提示0,0为直线的圆点坐标是不变的    newx = [0, xdata[i]]    newy = [0, ydata[i]]    line.set_data(newx, newy)    return line,#第5步:相关设置plt.title('Graph of circle & pendulumno')plt.axis('equal')ani = animation.FuncAnimation(fig, update, range(1, len(xdata)), init_func=init, interval=50)plt.show()

3.2 效果图:

4 圆和可转动的半径:

===============

4.1 代码:

#第1步:导入模块import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animation#第2步:初始化画布和ax定义#注意动画需要这个,静态图片可以省略,采用默认fig, ax = plt.subplots()ax.grid() #显示网格#第3步:画圆#定义圆的半径r=3.0#角度theta = np.arange(0, 2*np.pi, 0.01)#圆的圆弧线的x和y坐标x =  r * np.cos(theta)y =  r * np.sin(theta)#画圆的圆弧线plt.plot(x, y)#第4步:单摆设置#半径直线数据xdata = [r*np.sin(theta[i]) for i in range(len(theta))]ydata =  [r*np.cos(theta[i]) for i in range(len(theta))]#画半径直线line, = ax.plot([], [], 'o-', lw=2)#初始化函数def init():    ax.set_xlim(-4, 4)    ax.set_ylim(-4, 4)    return line,#刷新函数def update(i):    #提示0,0为直线的圆点坐标是不变的    newx = [0, xdata[i]]    newy = [0, ydata[i]]    line.set_data(newx, newy)    return line,#第5步:相关设置plt.title('Graph of circle & radius')plt.axis('equal')ani = animation.FuncAnimation(fig, update, range(1, len(xdata)), init_func=init, interval=10)plt.show()

4.2 效果图:

===再复杂一些===

5 加入sin和cos:

============

5.1 代码:

#第1步:导入模块import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animation#第2步:初始化画布和ax定义#注意动画需要这个,静态图片可以省略,采用默认fig, ax = plt.subplots()ax.grid() #显示网格#第3步:画圆#定义圆的半径r=3.0#角度theta = np.arange(0, 2*np.pi, 0.01)#圆的圆弧线的x和y坐标#水平向左移动4个单位x =  -4+r * np.cos(theta)y =  r * np.sin(theta)#画圆的圆弧线plt.plot(x, y)#第4步:画线设置#半径直线数据xdata = [-4+r*np.sin(theta[i]) for i in range(len(theta))]ydata =  [r*np.cos(theta[i]) for i in range(len(theta))]#画半径直线line, = ax.plot([], [], 'o-', lw=2)#sin波动线linesin, = ax.plot([], [], lw=2)#cos波动线linecos, = ax.plot([], [], lw=2)#初始化函数def init():    ax.set_xlim(-4, 4)    ax.set_ylim(-4, 4)    #sin和cos线    linesin.set_data([], [])    linecos.set_data([], [])    return line,linesin,linecos, #刷新函数def update(i):    #提示0,0为直线的圆点坐标是不变的    newx = [-4, xdata[i]]    newy = [0, ydata[i]]    line.set_data(newx, newy)        #+1就是水平向右移动1个单位    sinx = 1+np.linspace(0, 4, 1000)    siny = 2+np.sin(2 * np.pi * (sinx - 0.01 * i))    linesin.set_data(sinx, siny)    #+1就是水平向右移动1个单位    cosx = 1+np.linspace(0, 4, 1000)    cosy = -2+np.cos(2 * np.pi * (cosx - 0.01 * i))    linecos.set_data(cosx, cosy)    return line,linesin,linecos,#第5步:相关设置plt.title('Graph of circle、radius、sin & cos')plt.axis('equal')ani = animation.FuncAnimation(fig, update, range(1, len(xdata)), init_func=init, interval=10)plt.show()

5.2 效果图:

再画直线怎么办?

6 再复杂些:

========

6.1 代码:

#第1步:导入模块import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animation#第2步:初始化画布和ax定义#注意动画需要这个,静态图片可以省略,采用默认fig, ax = plt.subplots()ax.grid() #显示网格#第3步:画圆#定义圆的半径r=3.0#角度,0.01越小,速度越慢theta = np.arange(0, 2*np.pi, 0.01)#圆的圆弧线的x和y坐标#水平向左移动4个单位x =  -4+r * np.cos(theta)y =  r * np.sin(theta)#画圆的圆弧线plt.plot(x, y)#第4步:直线设置#半径直线数据xdata = [-4+r*np.sin(theta[i]) for i in range(len(theta))]ydata =  [r*np.cos(theta[i]) for i in range(len(theta))]#画半径直线line, = ax.plot([], [], 'o-', lw=2)#sin波动线linesin, = ax.plot([], [], lw=2,label='sin')#cos波动线linecos, = ax.plot([], [], lw=2,label='cos')#连接sin和cos的线linesinl, = ax.plot([], [], 'o-', lw=2,label='sinline')linecosl, = ax.plot([], [], 'o-', lw=2,label='cosline')#水平线==lineshui==xs和ysxs = np.linspace(-6,6,100)ys =[0]*len(xs)plt.plot(xs, ys, '-b', label='lineshui')#垂直线==linechui==xc和ycyc = np.linspace(-4,4,100)xc =[0]*len(yc)plt.plot(xc, yc, '-y', label='linechui')#初始化函数def init():    ax.set_xlim(-4, 4)    ax.set_ylim(-4, 4)    #sin和cos的动态波动线    linesin.set_data([], [])    linecos.set_data([], [])    #sin和cos的连接线    linesinl.set_data([], [])    linecosl.set_data([], [])    return line,linesin,linecos, linesinl,linecosl,#刷新函数def update(i):    #提示-4,0为直线的圆点坐标是不变的    newx = [-4, xdata[i]]    newy = [0, ydata[i]]    #圆的半径直线    line.set_data(newx, newy)        #+1就是水平向右移动1个单位    sinx = 1+np.linspace(0, 4, 1000)    siny = 2+np.sin(2 * np.pi * (sinx - 0.01 * i))    #sin波动线    linesin.set_data(sinx, siny)    #+1就是水平向右移动1个单位    cosx = 1+np.linspace(0, 4, 1000)    cosy = -2+np.cos(2 * np.pi * (cosx - 0.01 * i))    #cos波动线    linecos.set_data(cosx, cosy)        newxsinl=[1,xdata[i]]    newysinl=[siny[i],ydata[i]]    #sin连接线,bug    linesinl.set_data(newxsinl,newysinl)    newxcosl=[1,xdata[i]]    newycosl=[cosy[i],ydata[i]]    #cos连接线,bug    linecosl.set_data(newxcosl,newycosl)    return line,linesin,linecos,linesinl,linecosl,#第5步:相关设置plt.title('Graph of circle、radius、sin & cos')plt.axis('equal')ani = animation.FuncAnimation(fig, update, range(1, len(xdata)), init_func=init, interval=10)plt.legend(loc='upper right')plt.show()

6.2 效果图:

小bug,留下,可以试试如何改进

msdn画圆弧函数_画直线不简单!python-matplotlib告诉你为什么相关推荐

  1. msdn画圆弧函数_三角函数常识2020

    速成零基础数学三角函数(旋转坐标系角度相关基础知识) 三角函数基础知识 函数是指在某个变化过程中,有两个互相依赖的变量x和y,如果x取某值,y则依照确定的关系取相应值,这时,y是x的函数.例如,骑自行 ...

  2. msdn画圆弧函数_复变函数与积分变换 简明笔记(八):保形映射(共形映射)

    在第一部分中我们就引入了复变函数的概念,但由于复变函数是二维点集之间的映射,所以作出复变函数的图像并不简单.事实上,研究复变函数的图像性质,主要是观察它将 平面上的平面图形映成 平面( )上的什么图形 ...

  3. msdn画圆弧函数_精确之美——用TikZ画硬盘示意图

    序言 备考某等级考试的时候,在教材中碰到了几个一直不太理解的.关于硬盘的概念:磁道.柱面号.扇区.然而教材没有配图,无法直观地了解这些概念的物理形态.维基百科的硬盘[1]词条页中倒是有一副不错的示意图 ...

  4. 画分段函数_秃头节:“函数”段子已出炉高中数学题型分析

    高中数学函数题型整理解析版 函数图像 有关函数图象识别问题的常见题型及解题思路(1)由函数的定义域,判断图象左右的位置,由函数的值域,判断图象的上下位置:②由函数的单调性,判断图象的变化趋势:③由函数 ...

  5. python代码画小狗_python代码画小狗_皮皮康之Python编程初探2:python函数的使用

    Hello 大家好,我是皮皮康. 相信此刻的你已经通过昨天的资料学会了如何使用python库以及对turtle库有了一定的了解,今天我们就结合turtle库讲述python函数的使用. [函数是什么? ...

  6. astype函数_从Excel到Python:最常用的36个Pandas函数!最完整的Pandas教程!

    本文涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入.数据清洗.预处理,以及最常见的数据分类,数据筛选,分类汇总,透视等最常见的操作. 生成数据表 常见的生成数据表的方法有两 ...

  7. python数字转日期函数_【转】Python 日期和时间

    本文转自:http://www.runoob.com/python/python-date-time.html Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Pytho ...

  8. r roc函数_画ROC曲线的R包总结

    原标题:画ROC曲线的R包总结 作者: Joseph Rickert 原文链接: https://rviews.rstudio.com/2019/03/01/some-r-packages-for-r ...

  9. cad多段线画圆弧方向_(cad多段线画圆弧方向)在cad中如何使用excel画样条曲线

    在cad中如何使用excel画样条曲线 AutoCAD本身没有提供函数曲线的绘制功能,不能直接利AutoCAD绘制函数曲线,但借助其他工具也能绘制,常用的方法有3种,第一种,借助其他能绘制函数曲线的C ...

最新文章

  1. GAN(Generative Adversarial Network,GAN)模型应用
  2. 怎么预约鸿蒙系统,华为鸿蒙2.0系统-鸿蒙2.0系统预约-艾艾软件园
  3. KVM中I/O虚拟化介绍(五)
  4. 如何使用图形界面Webmin管理linux服务器
  5. 黑客秘籍:7个有趣的信息安全项目
  6. centos7.4编译mysql5.6,centos7编译安装mysql5.6
  7. (四)Neo4j删除数据需要注意的问题
  8. Cocos2d-x-lua游戏两个场景互相切换MainScene01切换到MainScene02
  9. 域对抗网络Domain adversarial neural network及其应用相关论文
  10. C/C++获取Windows系统CPU和内存及硬盘使用情况
  11. 2W+汉字转拼音JS字库(UTF-8生僻字等通用无乱码)
  12. 新建文件夹的快捷键大全
  13. 数据结构导论-1.概述
  14. 子域名收集 -- 提莫(teemo)
  15. mui 图片预览(3)
  16. handsome主题添加服务器信息,Typecho handsome主题一言接口修改,使用自己的一言服务...
  17. synchronizedReentrantLock乐观锁悲观锁(Java线程安全实现)JVM9
  18. Android 获取/设置:窝蜂移动数据网络状态
  19. MySQL中更新时间字段的更新时点问题
  20. 安卓Android手机校园外卖订餐系统毕业设计

热门文章

  1. 使用 Visual Studio 对源代码文件进行哈希处理以确保文件完整性
  2. .Net Aop(静态织入)框架 BSF.Aop
  3. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题
  4. Win11 的日历 替代
  5. [转]Android 常见安全漏洞修复理论与实践
  6. React-引领未来的用户界面开发框架-读书笔记(二)
  7. 我要偷偷学习C#,然后学习GIS二次开发之试题汇总(附答案)
  8. ArcGIS实验教程——实验十二:栅格数据投影变换
  9. 地图投影系列介绍(一)----地球空间模型
  10. C和指针之函数之实现阶乘和斐波那契数(递归和非递归)