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}, }

编辑推荐精选

博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

Transly

Transly

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

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

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
TRAE编程

TRAE编程

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

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

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

商汤小浣熊

最强AI数据分析助手

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

imini AI

imini AI

像人一样思考的AI智能体

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

下拉加载更多