java matplot_使用Matplotlib以非阻塞方式绘图

本文介绍了如何在Java中利用Matplotlib进行非阻塞绘图,实现实时数据更新。通过示例代码展示了如何保存为PDF格式,并推荐了Windows上的SumatraPDF和Linux上的Evince或Ocular作为支持实时更新的轻量级PDF查看器,以保持绘图在脚本完成后仍然可见。
摘要由CSDN通过智能技术生成

实时绘图

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 100)

# plt.axis([x[0], x[-1], -1, 1]) # disable autoscaling

for point in x:

plt.plot(point, np.sin(2 * point), '.', color='b')

plt.draw()

plt.pause(0.01)

# plt.clf() # clear the current figure

如果数据量太大,您可以使用简单的计数器降低更新速率

cnt += 1

if (cnt == 10): # update plot each 10 points

plt.draw()

plt.pause(0.01)

cnt = 0

程序退出后

保持图

这是我无法找到满意答案的实际问题,我希望在脚本完成后没有关闭的绘图(如MATLAB),

如果你考虑一下,在脚本完成之后,程序就会被终止,没有合理的方法来保存这个图,所以有两种选择

阻止脚本退出(这是plt.show()而不是我想要的)

在单独的线程上运行绘图(太复杂)

这对我来说并不令人满意,所以我发现了另一种解决方案

SaveToFile和外部查看器中的查看

为此,保存和查看应该都很快,并且查看器不应该锁定文件和 should update the content automatically

选择保存格式

基于矢量的格式既小又快

SVG 很好,但除了网页浏览器默认需要手动更新外,没有找到好的浏览器

PDF 可以支持矢量格式,并且有支持实时更新的轻量级查看器

具有实时更新的快速轻量级查看器

对于 PDF ,有几个不错的选择

在Windows上我使用SumatraPDF这是免费的,快速的和轻的(我的情况下只使用1.8MB RAM)

在Linux上有几个选项,如Evince(GNOME)和Ocular(KDE)

示例代码和结果

用于将绘图输出到文件的示例代码

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 100)

y = np.sin(2 * x)

plt.plot(x, y)

plt.savefig("fig.pdf")

首次运行后,打开上面提到的一个查看器中的输出文件并欣赏 .

这是VSCode和SumatraPDF一起的截图,也是这个过程足够快以获得半实时更新率(我的设置可以接近10Hz,只需在间隔之间使用 time.sleep() )

c2869aed-8359-4cc4-83db-6ecf4bb3d805.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值