用于改进多行交互式 Altair 折线图的选项

如何解决用于改进多行交互式 Altair 折线图的选项

我的要求是将形状为 (50,000,2) 的 Pandas 数据框绘制为交互式折线图。一列包含 datetime64[ns],另一列包含浮点整数。

不幸的是,似乎有了这么多数据,交互式图表在平移和缩放时变得很慢。我的图表非常基本,我可以观察到,一旦我将行数减少到 FAQ 并了解官方指南甚至不建议开始时超过 5,000 行。尽管如此,我正在寻找提高性能方法,但似乎对此没有太多讨论

我不需要一次显示所有 50,000 个数据点,但我确实希望将所有 50,000 个数据点存储在一个独立的 .html 文件(即图表)中。

我正在考虑“将绘图保存到磁盘”、“使用滑块创建滑动窗口效果以限制一次显示的数据点数量”、“使用更高效的数据类型”、“更改线条的外观,以减少渲染的强度”。真的,任何可能有帮助的东西都很好。对于某些情况,我将性能与更专用的可视化软件(如 Matlab)进行比较,在其中我可以毫无问题地制作交互式包含这么多数据的折线图。

或者,我也很高兴听到解释,为什么由于 HTML、JSON、altair、Vega 或其他任何内容的限制,无法以交互方式绘制这么多数据。

解决方法

正在努力使 Vega 的性能更高(包括通过 WebGL),您可以在此处阅读https://github.com/vega/vega/issues/2619。在这些土地之前,我认为你最好的办法是放大一个较小的区域,这听起来可能很好用,因为你提到不需要一次显示所有点。我发现使用 data_server 后端也可以帮助解决一些大数据速度减慢的问题,尽管与渲染无关。

import pandas as pd
import numpy as np
import altair as alt


alt.data_transformers.enable('data_server')

N=50000
test_df = pd.DataFrame({'t' : range(0,N,1),'A' : np.random.randint(0,100,size=N)})

alt.Chart(test_df).mark_point().encode(
    alt.X('t',scale=alt.Scale(domain=[4000,6000])),alt.Y('A',scale=alt.Scale(domain=[40,60]))).interactive()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?