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

编辑推荐精选

讯飞智文

讯飞智文

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

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

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

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

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

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

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

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

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

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多