如何在Jupyter Notebook纯Python环境运行Processing Python草图并传数据?
纯Python实现Jupyter Notebook中Processing风格的实时数据可视化
我懂你的需求——不想碰JavaScript,全程用Python在Jupyter里实现Processing风格的交互可视化,还能实时给草图喂数据、更新视角对吧?那py5绝对是你的最优选择,它是Processing的纯Python实现,完全不需要依赖JS,对Jupyter的适配也做得非常好。
第一步:安装并初始化py5
先在终端完成库安装:
pip install py5
然后在Jupyter Notebook里加载py5的魔法扩展,让它能正常运行交互式草图:
%load_ext py5
第二步:实现带实时数据更新的草图
下面是适配你需求的完整代码示例,我把数据传递、实时更新的核心逻辑都整合进去了:
import numpy as np import py5 import time from queue import Queue # 用线程安全的队列传递数据,避免绘图线程和数据加载线程冲突 data_queue = Queue() class DataVisualSketch: def __init__(self): self.current_batch = None def setup(self): # 初始化画布大小,支持2D/3D(加py5.P3D即可开启3D) py5.size(800, 600) # 设置初始绘图样式 py5.background(255) py5.stroke(0, 100, 200) py5.fill(0, 100, 200, 50) def draw(self): # 每次绘图前检查是否有新数据 if not data_queue.empty(): self.current_batch = data_queue.get() if self.current_batch is not None: # 清空画布准备绘制新数据 py5.background(255) # 这里替换成你的可视化逻辑,比如绘制散点、3D模型等 for x, y in self.current_batch: py5.ellipse(x * py5.width, y * py5.height, 15, 15) # 初始化并启动草图,非阻塞模式让Jupyter可以继续执行后续代码 sketch = py5.create_sketch(DataVisualSketch()) sketch.run_sketch(blocking=False) # 模拟你的数据加载逻辑,替换成实际的np.load和getNextBatch def data_generator(): while True: # 生成一批模拟数据(替换成你的真实数据加载代码) batch = np.random.rand(120, 2) yield batch time.sleep(0.3) # 模拟数据更新间隔 # 持续给草图喂数据 for batch in data_generator(): data_queue.put(batch) # 可根据需求添加终止条件,比如检测特定信号后停止循环
关键细节说明
- 线程安全数据传递:用
Queue来传递数据是因为py5的绘图线程和你的数据加载线程是并行的,直接共享变量可能会引发线程安全问题。 - 非阻塞运行:
run_sketch(blocking=False)让草图在后台运行,不会卡住Jupyter的代码执行,这样你才能持续给它推送新数据。 - 灵活的可视化扩展:如果需要3D视角,只要在
setup里把size改成py5.size(800, 600, py5.P3D),然后用py5的3D绘图API(比如sphere()、box())即可,全程纯Python实现。
内容的提问来源于stack exchange,提问作者vwvan
相关产品推荐
相关产品推荐

