jupyter-scatter

jupyter-scatter

高效处理百万级数据点的交互式散点图工具

Jupyter Scatter是一款为Jupyter环境设计的交互式散点图工具,能高效处理百万级数据点。它支持视图链接、平移缩放和数据选择,采用WebGL渲染确保大规模数据流畅展示。该工具提供直观API,与Pandas DataFrames深度集成,并具备智能默认设置。Jupyter Scatter支持自定义视觉编码和多图表同步交互,适用于大规模数据集的探索和比较。

Jupyter Scatter交互式散点图数据可视化大规模数据集Jupyter NotebookGithub开源项目
<h1 align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/f1938ccb-67ef-4865-a775-d3bc43f5bafd.svg" height="24"></img> Jupyter Scatter </h1> <div align="center">

pypi 版本 构建状态 API 文档 笔记本示例 教程

</div> <div align="center">

<strong>一个适用于 Jupyter Notebook、Lab 和 Google Colab 的交互式散点图小部件</strong><br/>可以处理数百万个数据点并支持视图链接

</div> <br/> <div align="center">

演示

</div>

功能?

  • 🖱️ 交互性:通过鼠标或 Python API 交互式地平移、缩放和选择数据点。
  • 🚀 可扩展性:借助 WebGL 渲染,可流畅绘制多达数百万个数据点。
  • 🔗 互联性:在多个散点图实例之间同步视图、悬停和选择。
  • 有效默认值:依赖 Jupyter Scatter 默认选择感知有效的点颜色和不透明度。
  • 📚 友好 API:享受与 Pandas DataFrames 深度集成的可读 API。
  • 🛠️ 可集成性:通过观察其 traitlets 在自己的小部件中使用 Jupyter Scatter。

为什么?

想象一下,尝试以 2D 散点图的形式探索数百万个数据点的数据集。除了绘图,探索通常涉及三个方面:首先,我们希望交互式地调整视图(例如,通过平移和缩放)和视觉点编码(例如,点的颜色、不透明度或大小)。其次,我们希望能够选择和突出显示数据点。第三,我们希望比较多个数据集或同一数据集的多个视图(例如,通过同步交互)。jupyter-scatter 的目标是支持这三个要求,并可扩展到数百万个点。

如何实现?

在内部,Jupyter Scatter 使用 regl-scatterplot 进行 WebGL 渲染,使用 traitlets 实现 JS 和 iPython 内核之间的双向通信,并使用 anywidget 组合小部件。

目录

  1. 安装
  2. 入门
  3. 文档
  4. 示例
  5. 开发

安装

pip install jupyter-scatter

如果你使用的是 JupyterLab <=2:

jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-scatter

有关最小工作示例,请查看 test-environments

入门

[!提示] 访问 jupyter-scatter.dev 了解 Jupyter Scatter 所有基本功能的详细信息,并查看我们来自 SciPy '23 的全面教程

最简单的示例

在最简单的情况下,你可以按如下方式将 x/y 坐标传递给绘图函数:

import jscatter import numpy as np x = np.random.rand(500) y = np.random.rand(500) jscatter.plot(x, y)
<img width="448" alt="最简单的散点图示例" src="https://yellow-cdn.veclightyear.com/ab5030c0/dc494e36-5558-4cd9-b337-3fa9e993898f.png">

Pandas 示例

假设你的数据存储在如下所示的 Pandas 数据框中:

import pandas as pd # 只是一些随机的浮点数和整数值 data = np.random.rand(500, 4) df = pd.DataFrame(data, columns=['mass', 'speed', 'pval', 'group']) # 我们将 `group` 列转换为字符串,以确保它被识别为分类数据。 # 这在高级示例中会很有用。 df['group'] = df['group'].map(lambda c: chr(65 + round(c)), na_action=None)
xyvaluegroup
00.130.270.51G
10.870.930.80B
20.100.250.25F
30.030.900.01G
40.190.780.65D

然后,你可以通过引用列名来可视化这些数据:

jscatter.plot(data=df, x='mass', y='speed')
<details><summary>显示结果散点图</summary> <img width="448" alt="Pandas 散点图示例" src="https://yellow-cdn.veclightyear.com/ab5030c0/c91ee37f-1872-4df4-b858-ee8a1c5ba6a3.png"> </details>

高级示例

通常,你想要自定义视觉编码,例如点的颜色、大小和不透明度。

jscatter.plot( data=df, x='mass', y='speed', size=8, # 静态编码 color_by='group', # 数据驱动编码 opacity_by='density', # 视图驱动编码 )
<img width="448" alt="高级散点图示例" src="https://yellow-cdn.veclightyear.com/ab5030c0/68ad8594-27a2-4856-9887-7f11601ca2da.png">

在上面的示例中,我们选择了静态点大小为 8。相比之下,点的颜色是数据驱动的,根据分类 group 值分配。点的不透明度是视图驱动的,由当前视图中可见的点数动态定义。

还要注意 jscatter 如何根据用于颜色编码的数据类型默认使用适当的颜色映射。在这个示例中,由于数据类型为 categorical 且类别数少于 9,jscatter 使用了来自 Okabe 和 Ito 的色盲安全色图。

**重要提示:**为了让 jscatter 识别分类数据,相应列的 dtype 需要是 category! 当然,你可以自定义颜色映射和许多其他视觉编码参数,如下所示。

函数式 API 示例

当你想要自定义大量属性时,平面 API 可能会变得overwhelming。因此,jscatter 提供了一个函数式 API,按类型对属性进行分组,并通过具有意义的命名方法暴露它们。

scatter = jscatter.Scatter(data=df, x='mass', y='speed') scatter.selection(df.query('mass < 0.5').index) scatter.color(by='mass', map='plasma', order='reverse') scatter.opacity(by='density') scatter.size(by='pval', map=[2, 4, 6, 8, 10]) scatter.height(480) scatter.background('black') scatter.show()
<img width="448" alt="函数式 API 散点图示例" src="https://yellow-cdn.veclightyear.com/ab5030c0/306b3c65-0a5d-42ec-b038-b34393aa61fc.png">

当你动态更新属性时,即在调用 scatter.show() 之后,图表将自动更新。例如,尝试调用 scatter.xy('speed', 'mass'),你会看到点沿对角线镜像。

此外,所有参数都是可选的。如果你指定参数,这些方法将作为设置器并更改属性。如果你不带任何参数调用方法,它将作为获取器并返回属性(或多个属性)。例如,scatter.selection() 将返回当前选中的点。

最后,散点图是交互式的,支持双向通信。因此,如果你用套索工具选择一些点,然后调用 scatter.selection(),你将获得当前的选择。

链接散点图

要探索多个散点图并链接它们的视图、选择和悬停交互,请使用 jscatter.link()

jscatter.link([ jscatter.Scatter(data=embeddings, x='pcaX', y='pcaY', **config), jscatter.Scatter(data=embeddings, x='tsneX', y='tsneY', **config), jscatter.Scatter(data=embeddings, x='umapX', y='umapY', **config), jscatter.Scatter(data=embeddings, x='caeX', y='caeY', **config) ], rows=2)

https://user-images.githubusercontent.com/932103/162584133-85789d40-04f5-428d-b12c-7718f324fb39.mp4

更多详情请参见 notebooks/linking.ipynb

可视化数百万数据点

使用 jupyter-scatter,你可以轻松地可视化和交互式地探索包含数百万点的数据集。

在下面的例子中,我们正在可视化使用 Rössler 吸引子 生成的 500 万个点。

points = np.asarray(roesslerAttractor(5000000)) jscatter.plot(points[:,0], points[:,1], height=640)

https://user-images.githubusercontent.com/932103/162586987-0b5313b0-befd-4bd1-8ef5-13332d8b15d1.mp4

更多详情请参见 notebooks/examples.ipynb

Google Colab

虽然 jscatter 主要是为 Jupyter Lab 和 Notebook 开发的,但它在 Google Colab 中也能正常运行。示例请参见 jupyter-scatter-colab-test.ipynb


开发

<details><summary>设置开发环境</summary> <p>

要求:

安装:

git clone https://github.com/flekschas/jupyter-scatter/ jscatter && cd jscatter hatch shell pip install -e ".[dev]"

修改 Python 代码后: 重启内核。

或者,你可以通过启用 autoreload 扩展来启用自动重新加载。为此,在笔记本开头运行以下代码:

%load_ext autoreload %autoreload 2

修改 JavaScript 代码后: 执行 cd js && npm run build

或者,你可以运行 npm run watch 并动态重新打包代码。

</p> </details> <details><summary>设置测试环境</summary> <p>

转到 test-environments 并按照说明操作。

</p> </details>

引用

如果你在研究中使用 Jupyter Scatter,请引用以下预印本:

@article{lekschas2024jupyter, title = {Jupyter Scatter: Interactive Exploration of Large-Scale Datasets}, url = {https://arxiv.org/abs/2406.14397}, doi = {10.48550/arXiv.2406.14397}, publisher = {arXiv}, journal = {arXiv}, author = {Lekschas, Fritz and Manz, Trevor}, year = {2024}, month = {6}, }

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
下拉加载更多