iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Matplotlib如何绘制动态实时曲线
  • 516
分享到

Matplotlib如何绘制动态实时曲线

2023-06-15 09:06:50 516人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“Matplotlib如何绘制动态实时曲线”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Matplotlib如何绘制动态实时曲线”这篇文章吧。很多时候,我们需要实时的绘制

这篇文章主要为大家展示了“Matplotlib如何绘制动态实时曲线”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Matplotlib如何绘制动态实时曲线”这篇文章吧。

很多时候,我们需要实时的绘制曲线,如实时的绘制串口接收到的数据。最先想到的解决策略是类似于Matlab种的drawnow函数。

python中Matplotlib库有着和Matlan绘图库相似的功能,但是并没有drawnow这样的函数。

已有的解决方案

通过网上现有的资料 基于Python实现matplotlib中动态更新图片(交互式绘图) ,可以通过打开Matplotlib的交互模式来实现实时绘图的目的,此时需要用到函数matplotlib.pyplot.ion

存在的问题

通过上述方法实时绘图,存在一个严重的问题:随着时间推移,CPU消耗越大,费时越多,最终导致程序卡顿。这显然无法满足我们实时绘图的要求。

以下通过time模块计算每一步的耗时,直观地表现这一现象。

def Method(point):   es_time = np.zeros([point])    fig=plt.figure()   ax=fig.add_subplot(1,1,1)   ax.axis("equal") #设置图像显示的时候XY轴比例   ax.set_xlabel('Horizontal Position')   ax.set_ylabel('Vertical Position')   ax.set_title('Vessel trajectory')   plt.grid(True) #添加网格   plt.ion()  #interactive mode on   INIObsX=0000   IniObsY=4000   IniObsAngle=135   IniObsSpeed=10*math.sqrt(2)   #米/秒   print('开始仿真')   for t in range(point):       t0 = time.time()       #障碍物船只轨迹       obsX=IniObsX+IniObsSpeed*math.sin(IniObsAngle/180*math.pi)*t       obsY=IniObsY+IniObsSpeed*math.cos(IniObsAngle/180*math.pi)*t       ax.scatter(obsX,obsY,c='b',marker='.')  #散点图       #下面的图,两船的距离       plt.pause(0.001)       es_time[t] = 1000*(time.time() - t0)   return es_time

耗时结果

Matplotlib如何绘制动态实时曲线
Method

很显然每步绘图时间与绘图点数呈线性相关的趋势,且随着点数增加,时间消耗越多。可以想象,当绘图的点数到达上万乃至亿的时候,那电脑就卡住了。

分析原因

个人猜测出现上述这种现象的原因,是由代码ax.scatter(obsX,obsY,c='b',marker='.')造成的。这段代码每一循环一次就新画一条曲线,而不清除之前的曲线,这就必然导致越往后循环所花费的CPU资源内存资源越多,最终机器卡死。

改进方法

既然原因是因为不断重复画图所致,导致机器资源的累积消耗,所以想到的第一个解决方法,那就是每次画图前,清除之前的曲线。

根据上述思想,在每一次的画图代码ax.scatter(obsX,obsY,c='b',marker='.')前加上清除代码plt.cla()。即:

plt.cla()        ax.plot(obsX,obsY,'-g',marker='*')  #散点图

可是这样做之后就会存在新的问题:之前定义的坐标轴,标题,图例等等信息就都被清除了。解决方法则,需要在每一步的循环中,重新定义这些信息。

完整代码

def Method_Improve(point):    def initial(ax):        ax.axis("equal") #设置图像显示的时候XY轴比例        ax.set_xlabel('Horizontal Position')        ax.set_ylabel('Vertical Position')        ax.set_title('Vessel trajectory')        plt.grid(True) #添加网格        return ax        es_time = np.zeros([point])     fig=plt.figure()    ax=fig.add_subplot(1,1,1)    ax = initial(ax)    plt.ion()  #interactive mode on    IniObsX=0000    IniObsY=4000    IniObsAngle=135    IniObsSpeed=10*math.sqrt(2)   #米/秒    print('开始仿真')    obsX = [0,]    obsY = [4000,]    for t in range(point):        t0 = time.time()        #障碍物船只轨迹        obsX.append(IniObsX+IniObsSpeed*math.sin(IniObsAngle/180*math.pi)*t)        obsY.append(IniObsY+IniObsSpeed*math.cos(IniObsAngle/180*math.pi)*t)        plt.cla()        ax = initial(ax)        ax.plot(obsX,obsY,'-g',marker='*')  #散点图        #下面的图,两船的距离        plt.pause(0.001)        es_time[t] = 1000*(time.time() - t0)    return es_time

耗时结果

Matplotlib如何绘制动态实时曲线
Method_Improve

显然循环次数与耗时不再呈正相关趋势,可以说是在一定误差范围内,耗时保持稳定。

改进方法的改进

改进方法中仍存在一个问题:由于每次循环都需要清除坐标轴信息,那么每次循环也必须再重新设置坐标轴信息。显然这种做法,导致了额外的算力消耗,那能否有新的方法,规避这种问题呢?答案显然是有的。

但是解决思路还是得从原始问题出发,即重复画图,导致资源的累积消耗。所以令一种新的思路:只画一条(需要数量的)曲线,每次循环更改这些曲线的数据。

那么按照上述思路之后,只需程序开头定义好坐标轴信息,而不需要每次循环内清除重设坐标轴信息。

具体做法,就是获取曲线的句柄,进行修改,即有:

line.set_xdata(obsX)        line.set_ydata(obsY)

完整代码:

def ImprovedMethod_Improve(point):        es_time = np.zeros([point])     fig=plt.figure()    ax=fig.add_subplot(1,1,1)    ax.set_xlabel('Horizontal Position')    ax.set_ylabel('Vertical Position')    ax.set_title('Vessel trajectory')        line = ax.plot([0,0],[4000,4000],'-g',marker='*')[0]    plt.grid(True) #添加网格    plt.ion()  #interactive mode on    IniObsX=0000    IniObsY=4000    IniObsAngle=135    IniObsSpeed=10*math.sqrt(2)   #米/秒    print('开始仿真')    obsX = [0,]    obsY = [4000,]    for t in range(point):        t0 = time.time()        #障碍物船只轨迹        obsX.append(IniObsX+IniObsSpeed*math.sin(IniObsAngle/180*math.pi)*t)        obsY.append(IniObsY+IniObsSpeed*math.cos(IniObsAngle/180*math.pi)*t)                line.set_xdata(obsX)        line.set_ydata(obsY)        ax.set_xlim([-200,10*point+200])        ax.set_ylim([3800-10*point,4200])        #下面的图,两船的距离        plt.pause(0.001)        es_time[t] = 1000*(time.time() - t0)    return es_time

Matplotlib如何绘制动态实时曲线

以上是“Matplotlib如何绘制动态实时曲线”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Matplotlib如何绘制动态实时曲线

本文链接: https://www.lsjlt.com/news/279359.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Matplotlib如何绘制动态实时曲线
    这篇文章主要为大家展示了“Matplotlib如何绘制动态实时曲线”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Matplotlib如何绘制动态实时曲线”这篇文章吧。很多时候,我们需要实时的绘制...
    99+
    2023-06-15
  • 关于Matplotlib绘制动态实时曲线的方法改进指南
    很多时候,我们需要实时的绘制曲线,如实时的绘制串口接收到的数据。最先想到的解决策略是类似于Matlab种的drawnow函数。 在python中Matplotlib库有着和Matla...
    99+
    2024-04-02
  • Android实现动态曲线绘制
    我们在安卓开发中,有时会用到统计图表的功能,而曲线绘制是其中比较典型的一种,一般是利用给定的坐标点集和安卓自带的绘图模块进行绘制,直接得到的是一张完整的静态的曲线图。但有时,我们需要...
    99+
    2024-04-02
  • Python Matplotlib绘制动图平滑曲线
    目录绘制动图FuncAnimationArtistAnimation使用 scipy.ndimage.gaussian_filter1d() 高斯核类绘制平滑曲线使用 scipy.i...
    99+
    2024-04-02
  • Android怎么实现动态曲线绘制
    这篇文章主要介绍了Android怎么实现动态曲线绘制的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么实现动态曲线绘制文章都会有所收获,下面我们一起来看看吧。我们在安卓开发中,有时会用到统计图表的...
    99+
    2023-07-02
  • C#如何实现chart控件动态曲线绘制
    这篇文章将为大家详细讲解有关C#如何实现chart控件动态曲线绘制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下思想实验室要做一个动态曲线绘制,网上方法很多,但是缺乏完整代码和效果图的整合,往...
    99+
    2023-06-29
  • Python编程使用matplotlib绘制动态圆锥曲线示例
    目录椭圆双曲线抛物线极坐标方程作为让高中生心脏骤停的四个字,对于高考之后的人来说可谓刻骨铭心,所以定义不再赘述,直接撸图,其标准方程分别为 在Python中,绘制动图需要用到mat...
    99+
    2024-04-02
  • Python+matplotlib实现简单曲线的绘制
    目录一、安装matplotlib二、测试 matplotlib三、 绘制简单的折线四、使用 scatter() 绘制散点图并设置其样式1、要绘制单个点2、要绘制系列点3、自...
    99+
    2024-04-02
  • C#实现chart控件动态曲线绘制
    本文实例为大家分享了C#实现chart控件动态曲线绘制的具体代码,供大家参考,具体内容如下 思想 实验室要做一个动态曲线绘制,网上方法很多,但是缺乏完整代码和效果图的整合,往往总是缺...
    99+
    2024-04-02
  • C#怎么绘制实时曲线
    这篇文章主要讲解了“C#怎么绘制实时曲线”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么绘制实时曲线”吧!要做一个调试工具,采集传感器数据并显示。绘制曲线注意坐标反转,线条的张力即可。...
    99+
    2023-06-29
  • Python+matplotlib怎么实现简单曲线的绘制
    这篇文章主要讲解了“Python+matplotlib怎么实现简单曲线的绘制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python+matplotlib怎么实现简单曲线的绘制”吧!一、安...
    99+
    2023-06-30
  • C#动态绘制多条曲线的方法
    本文实例为大家分享了C#动态绘制多条曲线的具体代码,供大家参考,具体内容如下 实时绘制多条曲线,纵轴为数值,横轴为时间,精确到毫秒 实现效果如下: 代码: using System...
    99+
    2024-04-02
  • C#怎么绘制实时曲线图
    这篇文章将为大家详细讲解有关C#怎么绘制实时曲线图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:        /...
    99+
    2023-06-29
  • C#绘制实时曲线的方法
    本文实例为大家分享了C#绘制实时曲线的具体代码,供大家参考,具体内容如下 1.要做一个调试工具,采集传感器数据并显示。绘制曲线注意坐标反转,线条的张力即可。项目中的曲线是从右往左显示...
    99+
    2024-04-02
  • 怎么使用Python+pyecharts绘制双动态曲线
    这篇“怎么使用Python+pyecharts绘制双动态曲线”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Pytho...
    99+
    2023-07-02
  • Python+pyecharts绘制双动态曲线教程详解
    总体跟官方样例相似,但是官方样例因为部分代码有误无法运行,同时需要了解json,以及前后端知识需要一些时间,因此供大家参考。 这个是views def line_base() -&g...
    99+
    2024-04-02
  • echarts如何实现动态曲线图(多条曲线)
    目录echarts动态曲线图(多条曲线)HTML部分CSS部分JS部分echarts动态曲线图(多条曲线) ECharts是一个由百度开发的开源数据可视化工具,能够提供直观,生动,可...
    99+
    2022-11-13
    echarts 曲线图 echarts动态曲线图 echarts多条曲线
  • python中Matplotlib如何绘制直线
    小编给大家分享一下python中Matplotlib如何绘制直线,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!说明导入模块pyplot,并指定别名plt,以避免重...
    99+
    2023-06-20
  • Python如何绘制Matplotlib折线图
    本篇内容介绍了“Python如何绘制Matplotlib折线图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Matplotlib 绘图在...
    99+
    2023-06-30
  • matlab中如何绘制拟合曲线
    在MATLAB中绘制拟合曲线可以通过使用polyfit函数来拟合数据,并使用polyval函数来计算拟合曲线的值。下面是一个简单的例...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作