Project Icon

jupyter-scatter

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

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

Jupyter Scatter

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

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


演示

功能?

  • 🖱️ 交互性:通过鼠标或 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)
最简单的散点图示例

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')
显示结果散点图 Pandas 散点图示例

高级示例

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

jscatter.plot(
  data=df,
  x='mass',
  y='speed',
  size=8, # 静态编码
  color_by='group', # 数据驱动编码
  opacity_by='density', # 视图驱动编码
)
高级散点图示例

在上面的示例中,我们选择了静态点大小为 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()
函数式 API 散点图示例

当你动态更新属性时,即在调用 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


开发

设置开发环境

要求:

安装:

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 并动态重新打包代码。

设置测试环境

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

引用

如果你在研究中使用 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},
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号