Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于改进具有多行的交互式牵牛星折线图的选项_Python_Pandas_Altair - Fatal编程技术网

Python 用于改进具有多行的交互式牵牛星折线图的选项

Python 用于改进具有多行的交互式牵牛星折线图的选项,python,pandas,altair,Python,Pandas,Altair,我的要求是绘制一个形状为(50000,2)的熊猫数据框,作为一个交互式折线图。一列包含datetime64[ns],另一列包含浮点整数 不幸的是,使用如此多的数据,交互式图表在平移和缩放时变得相当缓慢。我的图表非常基本,我可以观察到,一旦我将行数减少到

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

不幸的是,使用如此多的数据,交互式图表在平移和缩放时变得相当缓慢。我的图表非常基本,我可以观察到,一旦我将行数减少到<~10000,性能就会明显提高。我已经阅读了,并且理解官方指南甚至没有建议开始时超过5000行。尽管如此,我仍在寻找提高性能的方法,对此似乎没有太多讨论

我不需要一次显示所有50000个数据点,但我希望所有50000个数据点都存储在一个自包含的.html文件(即图表)中

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


或者,我也很高兴听到一个解释,为什么这么多数据由于HTML、JSON、Altair、Vega或其他限制而无法交互绘制。

正在努力提高Vega的性能(包括通过WebGL),您可以在这里阅读。在这些点落地之前,我认为最好的办法是放大到一个较小的区域,因为您提到不需要一次显示所有点,所以这听起来效果不错。我发现使用data_服务器后端也可以帮助降低一些大型数据的速度,尽管与渲染无关

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()

再次感谢乔尔!我认为,从根本上说,我只是想弄清楚是我的错误代码还是织女星的限制导致了速度的下降。知道没有WebGL支持,我的心情会平静下来。另一方面,我在这里看到了您的评论:。你认为我值得一试使用博克还是阴谋?我试图构建的图表并不十分奇特(我的目标是制作一些交互式折线图),我想知道我是否使用了错误的工具来完成这项工作。@KenLin Yup我认为plotly和bokeh(+holoviews)都是不错的选择,因为大数据集的平滑交互是最重要的。如果您拥有的数据比webGL所能处理的还要多,您可以试用datashader,它可以在显示之前将数据光栅化为图像。您是否大致知道有多少数据可能需要光栅化?同样,这将是建立一个简单的交互式折线图与两列。10万行?一百万排?感觉您以前遇到过类似的问题,可能会有一个粗略的想法。@KenLin我通常看到提到的是,使用webgl可以使用几万到几十万个点,但数百万到几十亿个点需要数据阴影。我在这方面没有丰富的经验,所以你想自己试试。亲爱的,谢谢!