html显示实时时间_Python 动态实时可视化图像的一种奇怪实现

v2-8d94a22ab8a047990223127434b835ed_1440w.jpg?source=172ae18b

我总算被 matplotlib 的交互模式逼疯了。

不得不说matplotlib.pyplot.pause的设计着实反人类,这个函数每次调用都要夺走焦点,就算显示的窗口已经被最小化也不例外!能想象你在后台跑着一个程序,然后在另一个窗口里写文章,写着写着突然焦点消失,输入法里的字全都不见,而且这个时候继续打字,说不定会触发 matplotlib 窗口里的什么奇怪的快捷键……

所以我决定彻底放弃 matplotlib 的实时绘图功能。


Plotly 是一个基于网页实现的绘图库,拥有包括 Python 在内的多种语言支持。关于 Plotly 的使用可以参考官方文档或者其他相关文章。

本文只介绍一下使用 Plotly 实现实时绘图的一种思路。

注意,本文默认是不使用 Jupyter Notebook 的。

想到这一思路,是基于以下几个事实:

  • Plotly 的 offline 模式可以将图表输出为本地网页,而且不会阻塞。
  • 基于 selenium 和 chromedriver 的爬虫可以在后台运行,不会抢占焦点。
  • 所以为什么不用 selenium 来显示 plotly 输出的网页呢?

来看看代码实现:

首先,导入所需要的库。

import plotly
import plotly.graph_objects as go
from selenium.webdriver import Chrome
from pathlib import Path

pathlib 是为了方便将 plotly 输出的路径转化为链接,也可以用其他方式替代。

然后打开一个 Chrome 窗口。

driver = Chrome()

接下来画图。

trace = go.Scatter(x=x_list, y=y_list, mode='lines')
plot = plotly.offline.plot([trace], auto_open=False, filename='graph.html')

这里绘制的是折线图,其中x_listy_list是各数据点的坐标。输出为graph.html,这个文件名也会被赋值到plot变量中。

最后用 Chrome 显示出来。

driver.get((Path.cwd() / plot).as_uri()) 

完整代码:

import plotly
import plotly.graph_objects as go
from selenium.webdriver import Chrome
from pathlib import Path

driver = Chrome()

x_list = []
y_list = []

import time
try:
    for i in range(1000):
        x_list.append(i)
        y_list.append(i ** 2)

        trace = go.Scatter(x=x_list, y=y_list, mode='lines')
        plot = plotly.offline.plot([trace], auto_open=False, filename='graph.html')
        driver.get((Path.cwd() / plot).as_uri()) 

        time.sleep(1) # 用一个 sleep 来代替实际应用场景中的其他操作
finally:
    driver.close()

放一张效果图:

v2-31061b69d6356cac501697ab838a5832_b.gif

但是不得不说,这种方法确实挺奇怪的……

(封面PID:74724968)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值