在Vaex中如何进行交互式2D散点图缩放/点选择?

时间:2019-08-02 08:59:04

标签: vaex

我看到有可能在演示过程中这样做:https://youtu.be/2Tt0i823-ec?t=769

演示者那里有一个庞大的数据集,可以通过使用鼠标选择一个矩形来快速放大。

我还看到了本教程的“交互式小部件”部分:https://docs.vaex.io/en/latest/tutorial.html#Interactive-widgets

但是,我无法轻松复制该设置。实现它的最少步骤是什么?

在Ubuntu 19.04 vaex 2.0.2上,我已经尝试过:

python3 -m pip install --user vaex scipy pandas vaex-jupyter
jupyter nbextension enable --py widgetsnbextension
jupyter nbextension enable --py bqplot
jupyter nbextension enable --py ipyvolume
jupyter nbextension enable --py ipympl
jupyter nbextension enable --py ipyleaflet
jupyter nbextension enable --py ipyvuetify
jupyter notebook

然后我创建了一个笔记本并粘贴在笔记本中:

import vaex
import vaex.jupyter
import numpy as np
import pylab as plt
%matplotlib inline
df = vaex.example()
df.plot_widget(df.x, df.y, f='log1p', backend='bqplot')

但是我得到的只是没有图形和消息:

Plot2dDefault(w=None, what='count(*)', x='x', y='y', z=None)

如果相反,我这样做:

df.plot(df.x, df.y, f='log1p')

然后我得到了一个图,但这只是一个非交互式图像。

我还尝试了git clone笔记本,它是读取文档页面的源:https://github.com/vaexio/vaex/blob/0247f0673c5c0473001b0b66adcbc716560536aa/docs/source/tutorial.ipynb,但结果是相同的。

我的动机是要找到一个可以处理大量点的绘图程序,如Large plot: ~20 million samples, gigabytes of data

所述

2 个答案:

答案 0 :(得分:2)

使用virtualenv

不确定原因,但这已解决。我认为这是因为Jupyter可执行文件在Python 2上并且找不到Python 3扩展。

virtualenv --python=python3 .venv
. .venv/bin/activate
python3 -m pip install vaex scipy pandas vaex-jupyter
jupyter nbextension enable --py widgetsnbextension
jupyter nbextension enable --py bqplot
jupyter nbextension enable --py ipyvolume
jupyter nbextension enable --py ipympl
jupyter nbextension enable --py ipyleaflet
jupyter nbextension enable --py ipyvuetify
jupyter notebook

并在新笔记本中

import vaex
df = vaex.example()
df.plot_widget(df.x, df.y, f='log1p', backend='bqplot')

现在我看到具有缩放功能的交互式小部件!

enter image description here

版本:

pandas==0.25.0
scipy==1.3.0
vaex==2.0.2
vaex-jupyter==0.3.0

答案 1 :(得分:1)

Jupyter小部件存在前端代码和内核代码,内核代码(在这种情况下为Python)通常不是问题,如果您可以导入ipywidgets模块等,就可以了。

最大的问题是确保前端(经典笔记本或Jupyter实验室)已加载匹配的javascript库。假设您使用的是传统笔记本,调试方法如下:

由于ipywidgets库的javascript代码是使用nbextension机制添加到前端的,因此您可以检查是否使用启用并验证了所有库

$ jupyter nbextension list

应该显示所有绿色的“确定”和“已启用”(除非您明确禁用了它)。

如果未正确安装,则可能需要安装前端代码,例如:

$ jupyter nbextension install --py --symlink --sys-prefix ipywidgets
$ jupyter nbextension install --py --symlink --sys-prefix ipyvuetify

如果由于某种原因未自动启用扩展名(笔记本电脑的旧版本),请运行:

$ jupyter nbextension enable bqplot --py --sys-prefix
$ jupyter nbextension enable ipyvuetify --py --sys-prefix

如果事情不正常,您应该测试哪个库不正常,例如,从ipywidgets开始:

import ipywidgets as widgets
widget.FloatSlider()

如果没有显示滑块,则您有麻烦。继续使用其他库,并查看何时失败。如果失败,请检查JavaScript控制台(用于浏览器的Google)以获取错误消息,并查看是否从中获得提示。

最后,请确保您使用的是现代浏览器,Internet Explorer将不再删除它,因为它太旧了。我建议使用Chrome / Chromium或Firefox。