python - 使用 Pyglet 可视化大量数据
问题描述
我有一些较大的 csv 文件,其中包含海上雷达记录的数据。雷达显示 2048 个不同角度的接收回波。每个角度可以显示 512 个不同范围的数据。对于每个范围,回波强度存储为 0 到 255 之间的值。
为了可视化数据,我尝试使用 Pyglet 进行批量渲染。显示第一次旋转(2048 个角度)后,程序应继续浏览数据,显示最新记录。因此,每次我显示一个角度时,我都会尝试从顶点列表中删除下一个角度,它不会在前一个旋转的顶部绘制。
由于每次旋转可能有 2048*512 个读数,我制作了一个 2D 列表 0f 2048 x 512 来存储顶点列表,这样我就可以删除特定类型。请参阅以下代码片段。
import pyglet
win = pyglet.window.Window(1000, 1000)
batch = pyglet.graphics.Batch()
def update(dt):
stepSize = 10000 # Save the first 10000 measurements in the batch before drawing it
for i in range(Counter.cnt, Counter.cnt + stepSize):
(* Calculate the pixel positions of each measurements from the angle and range *)
# Add to batch and save in 2D list
arr[angle][currentRange] = batch.add(2, pyglet.gl.GL_LINES, None,
('v2f', (pts[0][0], pts[0][1], pts[1][0], pts[1][1])))
# Delete everything from the next angle
for n in range(0, len(arr[nextAngle])):
try:
arr[nextAngle][n].delete()
except:
pass
@win.event
def on_draw():
win.clear()
batch.draw()
if __name__ == '__main__':
pyglet.clock.schedule_interval(update, 1/120.0)
pyglet.app.run()
测量值可能应该绘制为多边形或三角形,但由于角度非常接近,我使用了线条。
这在前几次旋转中给了我一个很好的结果:
这些斑点代表海上周围的岛屿。然而,经过一些旋转后,程序变得更慢,显示如下:
在这张图片中,船已经旋转,因此图片中岛屿的位置也发生了变化。但是,从图片中可以看出,旋转后,显示屏上会绘制许多较小的点,这些点不应该存在。此外,部分测量值几乎是随机擦除的。
这里可能存在什么问题,以及显示数据的更好方法是什么?
解决方案
我仍然不完全确定导致问题的原因,但我找到了解决方法。
我没有使用VertexList.delete()
,而是将 vertexList 的颜色更改为黑色:
# Change color if vertixList exists, otherwise create new
if arr[angle][currentRange != 0:
arr[angle][currentRange].colors = [255, 255, 255, 255, 255, 255]
else:
arr[angle[currentRange] = batch.add(2, pyglet.gl.GL_LINES, None,
('v2f', (pts[0][0], pts[0][1], pts[1][0], pts[1][1])),
('c3B', (255, 255, 255, 255, 255, 255)))
# Change color of the next angle
for n in range(0, len(arr[nextAngle])):
try:
arr[nextAngle][n].colors = [0, 0, 0, 0, 0, 0]
except:
pass
使用这个我没有遇到同样的问题。
推荐阅读
- c# - 使用来自另一个仓库的 json 模式
- pytorch - 部分3D卷积还是转置+2D卷积更快?
- r - 将小提琴图与森林图对齐
- c# - C# WITH 类型参数中使用的旧 onPlatform 方法的新等效项
- reactjs - Next.js basePath 如何处理图像?
- flutter - 如何通过颤动将数据从一页传递到另一页?
- reactjs - 使用动态路由的 Next.js 页面上缺少元标记
- python - Python:string.rfind() 带有任何空白字符?
- reactjs - overflow-x scroll 切断盒子阴影
- reactjs - Nextjs - 嵌套动态路由 - pages/users/[uid]/goals/[goalId]