使用 Matplotlib 创建 CSV 数据的实时绘图

2024-01-20

我正在尝试使用 Matplotlib 来可视化一些测量结果。测量通常持续约 24 小时,并将在 csv 中包含约 3 万行数据。我一直在努力让我的情节真正动画化。我可以执行代码,它将显示截至当前时间点的快照,但不会显示其他内容。当我尝试自动缩放它时,没有绘制任何内容,它只是默认在两个轴上显示 -.6 到 +.6 的视图。我应该调用 plt.draw() 才能使其正常工作吗?这是我到目前为止所拥有的:

import numpy as np
import datetime as dt
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import animation

FMT = '%Y-%m-%d %H:%M:%S.%f'
data = np.genfromtxt('sampleData.csv', delimiter=',', skip_header=5,
                 names=['x', 'y', 'z', 'w'], dtype=['object', 'int8', 'int8', 'float'])                  

mytime = [dt.datetime.strptime(i.decode('ascii'), FMT) for i in data['x']]
thickness = data['w']

fig = plt.figure()
axes = fig.add_subplot(111)
line, = axes.plot([], [], '.')
plt.show(block=False)

def init():
    line.set_data([],[]) 
    return line,

fig.canvas.draw()

def animate(i):
    xdata = mytime[:i]
    ydata = thickness[:i]
    line.set_data(xdata, ydata)
    plt.draw()
    axes.relim()
    axes.autoscale(True,'both',True) 
    axes.autoscale_view(True,True,True)
    return line,

anim = animation.FuncAnimation(fig, animate, init_func=init,  
                           interval=0, blit=True)

plt.show()

这是 CSV 中的数据示例行:

2013-09-25 14:51:15.329091,1,0,439.80,,,,0,0,

你有两个问题。一是因为你实际上把东西画了两次,二是纯粹是人类心理学(随着时间的推移,情节似乎会变慢,因为你在 10000 上加 1 点,而不是在 10 或 100 上加 1 点)。


我们先来讨论一下双抽:

The FuncAnimation会为你绘制东西,但是通过告诉它使用位图传输,它只会更新轴的内部而不是刻度线等。因此,你需要手动调用draw,但是动画会调用draw_artist,还有。

通过删除,您应该能够获得至少 2 倍的加速blit=True and plt.draw()

此外,通过设置interval=0,你强迫它不断地绘制,这将有效地迫使事物锁定。将间隔设置为更合理的值,例如25(间隔以毫秒为单位。“25”是 40 fps。)。

例如,这对我来说非常顺利:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation

y = np.random.normal(0, 1, 10000).cumsum(axis=0)
x = np.arange(y.size)

fig, ax = plt.subplots()
line, = ax.plot([], [], '.')
ax.margins(0.05)

def init():
    line.set_data(x[:2],y[:2])
    return line,

def animate(i):
    i = min(i, x.size)
    xdata = x[:i]
    ydata = y[:i]
    line.set_data(xdata, ydata)
    ax.relim()
    ax.autoscale()
    return line,

anim = animation.FuncAnimation(fig, animate, init_func=init, interval=25)

plt.show()

我还添加了ax.margins(0.05)以避免轴限制捕捉到下一个最接近的“偶数”数字并给出“不稳定”的外观。


但是,由于您逐渐绘制越来越多的数据,因此变化率将看起来很慢,仅仅是因为随时间变化的数据似乎较少。在 10000 的末尾加 1 点很难被注意到,但是在 10 的末尾加 1 点就很明显了。very显。

因此,剧情看起来much尽管更新速度相同,但开始时比结束时更“令人兴奋”。

这与 matplotlib 没有任何关系,而是您选择的数据动画方式的结果。

为了解决这个问题,您可以考虑在数据中移动“滑动窗口”并一次绘制恒定数量的点。举个例子:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation

y = np.random.normal(0, 1, 1000000).cumsum(axis=0)
x = np.arange(y.size) + 1

fig, ax = plt.subplots()
line, = ax.plot([], [], 'k-')
ax.margins(0.05)

def init():
    line.set_data(x[:2],y[:2])
    return line,

def animate(i):
    win = 300
    imin = min(max(0, i - win), x.size - win)
    xdata = x[imin:i]
    ydata = y[imin:i]
    line.set_data(xdata, ydata)
    ax.relim()
    ax.autoscale()
    return line,

anim = animation.FuncAnimation(fig, animate, init_func=init, interval=25)

plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Matplotlib 创建 CSV 数据的实时绘图 的相关文章

随机推荐

  • GWT 中的简单超链接?

    这应该很简单 但不知怎的 我找不到在 GWT 中创建简单超链接的方法 基本上 我想在用户单击某些内容时加载另一个页面 超级链接 http google web toolkit googlecode com svn javadoc 1 6 c
  • 在 Haskell 中使用递归方案解决变更问题

    我试图从中理解组织形态关于递归方案的博客 https blog sumtypeofway com posts recursion schemes part 4 html 当我运行示例来解决问题时遇到问题改变问题 https en wikip
  • 如何 - 具有超时和取消功能的多个异步任务

    我想触发几个任务 同时为它们设置超时 这个想法是收集那些争分夺秒的任务的结果 并取消 甚至忽略 其他任务 我尝试使用扩展方法 WithCancellation 如所解释的here https stackoverflow com a 2568
  • Ember-数据递归 hasMany 关联

    有人使用 ember data 来建模数据树吗 我认为它会是这样的 Node DS Model extend children DS hasMany Node parent DS belongsTo Node 然而 我无法让这个工作正常进行
  • 如何制作一个更安全的 C++ 变体访问者,类似于 switch 语句?

    许多人使用 C 17 boost 变体的模式看起来与 switch 语句非常相似 例如 来自 cppreference com 的片段 http en cppreference com w cpp utility variant visit
  • 3 月 14 日不是 86400 秒长吗?

    在我的 Web 应用程序中 我让用户在简单的文本框中输入日期 该输入 当然是经过清理之后 通过 strtotime 运行 并向其中添加 86399 以使该时间戳成为所写入的当天的结束时间 11 59 59 这是出于截止日期的目的 因此 如果
  • 为什么 jQuery 模板 {{each}} 标签与 jQuery $.each 对 JavaScript 字符串数组的解释不同?

    强制性的jsFiddle 示例 http jsfiddle net patridge wuEyp 当我通过 jQuery 运行字符串数组时 each函数 我得到了我所期望的 each abc 123 def 456 function i v
  • 使用 RSpec 测试 searchkick

    我想创建用于在我的实践管理应用程序中搜索患者的功能规范 到目前为止 我已经在网上搜索并遵循了以下建议的解决方案 http bitsandbit es post 11295134047 unit testing with tire and e
  • 模板参数推导失败

    我正在尝试使用标签和enable if对模板参数实施约束 这是代码 include
  • iOS7 SKScene如何让精灵从屏幕边缘反弹?

    我正在开发一款球在 iPad 屏幕内弹跳的游戏 类似于乒乓球游戏 我看到 SKScene 的 SKPhysicsWorld 具有重力属性 并且还控制对象如何相互碰撞 有什么方法可以自动检测精灵的边缘是否与屏幕边缘发生碰撞 以便它可以反弹 或
  • WPF 应用程序转换为 ASP

    有没有办法把WPF应用程序变成ASP应用程序 或者它们是完全不相关的技术 XAML 格式让我想起了 HTML 似乎有一种方法 WPF 应用程序是 Windows 应用程序 而 ASP Net 应用程序是 Web 应用程序 这两个平台存在巨大
  • 无法使用 Namecheap 通过 Firebase 验证自定义域

    当我按照说明将 firebase 提供的文本记录 1 插入到我的 NameCheap 中后 不断弹出此错误消息 当前状态 抱歉 我们无法验证您的域名 该消息已经出现大约 5 天了 我捕获了 firebase 和 namecheap 设置的屏
  • H2数据库中auto_increment字段自增32?

    我有这个简单的表 仅供测试 create table table key int not null primary key auto increment name varchar 30 然后我执行以下请求 insert into table
  • 数据库恢复到特定状态以进行测试

    我们使用 Oracle 或 postgres 数据库和应用程序服务器来执行集成测试 为了将每个测试与另一个测试隔离 在每个测试之前都会删除并重新创建数据库模式 如您所见 这是一个耗时的过程 该应用程序使用 100 多个表 我们正在考虑编写自
  • C语言中的“静态”是什么意思?

    我见过这个词static在C代码中的不同地方使用 这是否像 C 中的静态函数 类 其中实现在对象之间共享 函数内的静态变量在调用之间保留其值 静态全局变量或函数仅在声明它的文件中 可见 如果你是新手 1 是一个比较陌生的话题 所以这里有一个
  • 为什么 document.addEventListener('load', function) 在 Greasemonkey 脚本中不起作用?

    它没有给出错误 我放了一个console log loaded userscript wifi autologin the console log有效 但 document addEventListener 的预期效果没有发生 在进行更多调
  • 如何使用 Visual Studio Code git Push 到不同的分支?

    我意识到在 VSCode 中提交后 有一个 推送 菜单选项可以将提交推送到默认分支 然而 我经常需要将它推送到不同的分支 有没有办法做到这一点或运行git push progress origin DEFAULT BRANCH OTHER
  • 如何找出哪个缺失的 DLL 导致我的 .NET 应用程序在启动时崩溃?

    当对第 3 方程序集的依赖项添加到典型的 NET 应用程序时 很容易忘记将它们添加到安装程序中 这个问题往往只有在应用程序安装后才会显现出来 并且以启动时崩溃的形式出现 几乎没有可用的有用信息 找出需要将哪些程序集添加到安装程序的最佳工具和
  • 头盔快递 ERR_BLOCKED_BY_RESPONSE.NotSameOrigin 200

    请我需要帮助 我检查了所有谷歌 但没有得到打开我的问题的真正答案 我想使用头盔来保护我的 Express 服务器 但是当我使用它时 我收到此错误 ERR BLOCKED BY RESPONSE NotSameOrigin 200 从数据库加
  • 使用 Matplotlib 创建 CSV 数据的实时绘图

    我正在尝试使用 Matplotlib 来可视化一些测量结果 测量通常持续约 24 小时 并将在 csv 中包含约 3 万行数据 我一直在努力让我的情节真正动画化 我可以执行代码 它将显示截至当前时间点的快照 但不会显示其他内容 当我尝试自动