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

1 说明:

======

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

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

1.3 环境:

python3.8+matplotlib3.2.0

32899de349499ce376713adaebdcb8ca.png

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

b5b1b97f64b540667cd2d0c016e9b8ee.png

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:

4a9ddcd8a27c4b12cc102bb698aba016.png

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:

d1891ce0a8784252ce102ac61b4a0f85.png

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 效果图:

bc2e1b58b0473be8e794590a75b5fefe.gif

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 效果图:

068bb340670497b8d08a18af10227c18.gif

===再复杂一些===

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 效果图:

cd8a9246b037d7a3c7caa520134a835a.gif

再画直线怎么办?

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 效果图:

9402279a3b56505af46b7c25591936ac.gif

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wifi6网络

2020年是Wifi6设备全面爆发的一年,华为、小米、华硕、腾达、TP-LINK、360等多家厂商相继发布了Wifi6路由产品,掀起了一股更换路由器的热潮。首先,我们先来看几个常识1、Wifi6和IPv6两个没有必然联系,Wifi6是一种支持802.11ax的Wif…

数据结构——用栈解决回文字符问题

回文 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈。) 所需的知识前提:栈 以下是顺序栈的基本算法 结构…

aspose excel中文文档_除了VBA,还有哪些编程语言可以操作Excel文件?

Excel(Microsoft office)是现在最常用的办公软件,主要涉及电子表格制作、数据处理、报表输出展示以及更高端的还有金融建模等;我们知道,在需要批处理多个Excel工作表以及工作簿的时候,需要用到一个自动化的利器:VBAVBA…

关于.NET5在IIS中部署的几个问题总结

本来我的系列教程已经慢慢剥离开IIS了,毕竟有了Docker容器以后,配合Nginx使用真的很不错。但是还是有很多同学使用IIS的,这个不可否认IIS的重要性。随着.NET的发布,很多小伙伴已经开始升级了,我也就陆陆续续收到了一些…

数据结构——括号匹配问题

括号匹配 给定一个字符串,其中的字符只包含三种括号:花括号{ }、中括号[ ]、圆括号( ),即它仅由 “( ) [ ] { }” 这六个字符组成。设计算法,判断该字符串是否有效,即字符串中括号是否匹配。括号匹配要求括号必须以正…

wordpress多站点主站调用分站最新文章_企业网站SEO最新的7个优化步骤!

如果你是一个企业主,你有建立企业官方网站的经验,在2-3年的运作中,我相信你至少修改了一个网站,甚至做了一个重大的SEO策略调整。当我们开始建立一个公司的时候,很多时候就是认为只要我们有一个公司的网站,…

Azure 静态 web 应用集成 Azure 函数 API

前几次我们演示了如何通过Azure静态web应用功能发布vue跟blazor的项目(使用 Azure静态web应用Github全自动部署VUE站点、使用Azure静态Web应用部署Blazor Webassembly应用)。但是一个真正的web应用,总是免不了需要后台api服务为前端提供数据或者处理数据的能力。同样…

c++ new一个结构体_C语言结构体,又一个纸老虎,纯干货讲解(附代码)

来源:网络,排版整理:晓宇微信公众号:芯片之家(ID:chiphome-dy)结构体的定义结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。结构体和其他类型基础数据类型一样&#xff0c…

c语言next的用法,C语言strchr使用之Next查找和截断想要的字符串

#include #include #include #include #include #include #include #include static char pstring[] "Hello\n"; // 这里不能是char*int main(){char tmp ;char* pstr strchr(pstring,‘l‘);printf("pstr is %s %p\n",pstr,pstr);#if 0// 搜后面的pstr …

problem b: 十进制整数转二进制_二进制的科学计数法?白话谈谈计算机如何存储与理解小数:IEEE 754...

浮点数的计算机表示(IEEE 754),由 UCB 数学教授 William Kahan 主要起草。后者也因其卓越贡献于1989年获得图灵奖。计算机组成原理与汇编语言这两门课均对该内容有所讲解。与课程中直接抛出公式与概念不同,我想首先与各位探讨"科学计数法"这个…

分享我的写作经验

大家好,我是Z哥。最近一段时间,我面基了几个在微信上聊得不错的小伙伴。和其中的两位有聊到关于写作的事情。概括地说就是他们也想写写博客、公众号,但是感觉无从下手。我和他们分享了我的一些经验,在这里做一下总结和补充&#x…

数据结构——二叉树的最小深度算法

给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 输入:root [3,9,20,null,null,15,7] 输出:2 示例 2: 输入:root …

开发板实现645协议C语言,迅为-imx6ull开发板之C语言实现LED例程

第九章我们使用汇编编写了 LED 灯的实验,在实际开发过程中大部分还是使用 C 语言,汇编只是用来完成 C 语言环境的初始化,本章我么就来实现用汇编完成 C 语言环境的初始化,然后用 C 语言实现 LED 的例程。10.1 C 程序版LED例程简介…

解锁环境变量在云原生应用中的各种姿势

应用程序在某些时刻总是需要一些外挂配置,云原生应用的实践是在容器化之前就将应用程序配置保留在代码之外。“12-Factors App:Store config in the environment① 外挂配置文件:业务配置 appsettings.json“可以在代码中要求加载appsetting.…

python字符串截取方法_如何使用python语言中的字符串方法截取字符串

在我们使用python语言中的字符串方法时,可能会判断某个字符串是否以什么开头,可以使用什么进行截取等。下面利用几个实例说明字符串中的方法的用法,操作如下:工具/原料 python 截图工具 方法/步骤 1 第一步,打开python…

数据结构——二叉树的层次遍历

问题描述: 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7] 返回其层次遍历结果: [ [3], [9,…

asp.net core 使用 TestServer 来做集成测试

asp.net core 使用 TestServer 来做集成测试Intro之前我的项目里的集成测试是随机一个端口,每次都真实的启动一个 WebServer,之前也有看到过微软文档上 TestServer 的介绍,当时没仔细看过以为差不多就没用,一直是启动了一个真正的…

微服务很香--麻辣味,但要慢慢消化

前言微服务在编程圈火的是不行不行的啦,可能还有很多小伙伴还没有进行微服务实操,但这个词,要说没听过、没看过,那小伙伴一定是假Programmer。虽然微服务很火,但不能盲目使用;先不说涉及技术和工具有多少&a…

c语言实现灰度图像阈值分割,灰度图像--图像分割 阈值处理之平均阈值

学习DIP第52天转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro开篇空话好久没写博客了&…

数据结构——二叉树的双序遍历

设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结 点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树 思路: 1.双序遍历与中序遍历类似,是中序遍历的变形 2.中序遍历是指对于二叉树的每一…