【问题标题】:How to do interactive 2D scatter plot zoom / point selection in Vaex?如何在 Vaex 中进行交互式 2D 散点图缩放/点选择?
【发布时间】:2019-12-10 21:12:30
【问题描述】:

在demo的时候看到是可以做到的:https://youtu.be/2Tt0i823-ec?t=769

那里,presenter 有一个巨大的数据集,并且可以通过鼠标选择一个矩形来快速放大。

我还看到了教程的“交互式小部件”部分: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 克隆作为阅读文档页面来源的笔记本:https://github.com/vaexio/vaex/blob/0247f0673c5c0473001b0b66adcbc716560536aa/docs/source/tutorial.ipynb,但结果相同。

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

【问题讨论】:

  • 你是从 jupyter 实验室还是经典笔记本运行这个?
  • @MaartenBreddels 我不确定,我刚刚输入了jupyter notebook,如问题所示:-) 好的,我刚刚搜索过,jupyter lab 是从jupyter lab 开始的,所以我猜是经典笔记本。
  • 可以用 3D 代替 2D 吗?
  • @TiagoMartinsPeres 不知道!试一试,如果找不到,请打开一个新问题并链接到它。
  • 先使用 Mayavi,因为知道这是可能的 (docs.enthought.com/mayavi/mayavi/mlab.html)。如果有足够的时间我会试试的。

标签: vaex


【解决方案1】:

Jupyter 小部件存在前端代码和内核代码,内核代码(本例中为 Python)通常不是问题,如果您可以导入例如 ipywidgets 模块,应该没问题。

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

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

$ jupyter nbextension list

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

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

$ 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 控制台(谷歌浏览器)是否有错误消息,看看你是否从中得到提示。

最后,请确保您使用的是现代浏览器,Internet Explorer 将不再适用,它太旧了。我推荐 Chrome/Chromium 或 Firefox。

【讨论】:

  • 哦,我通过使用 virtualenv 让它工作了。很难说原因,但我认为我的 jupyter 命令在 Python 2 中运行,这阻止了它找到 python3 扩展。尝试启用ipywidgets 失败:The Python module ipywidgets is not a valid nbextension, it is missing the _jupyter_nbextension_paths() method. BTW,我认为widgetsnbextension 是正确的新方法。
【解决方案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')

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

版本:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多