Project Icon

deepscatter

大规模交互式数据可视化JavaScript库 支持百万级数据点渲染

deepscatter是一款高性能JavaScript库,专为浏览器中的大规模数据集交互式可视化而设计。该库采用Apache Arrow格式、WebGL渲染和GPU计算技术,实现快速数据处理和渲染,可流畅处理百万级数据点。deepscatter适用于创建地图、文献分析等大规模数据可视化应用,支持静态部署。库提供丰富API,允许自定义颜色、大小、抖动等可视化效果。

Web版深度散点图

这是一个允许在浏览器中交互式可视化极大数据集的库。

它之所以快速有三个原因:

  1. 所有数据都以Apache Arrow的feather格式发送,采用自定义四叉树格式,使得只在需要时才加载缩放所需的数据。Feather在浏览器中传输后无需解析时间,压缩效果良好,并且可以直接复制到GPU而无需在JS中转换。这是未来的方向。我们现在还允许在Arrow数据上进行自定义的浏览器内计算。

  2. 大部分渲染都是使用WebGL的自定义图层完成的,缓冲区管理策略由REGL处理。这意味着对于点或不同对象没有不必要的抽象或单独的绘制调用;为所有需要的点附加最少数量的缓冲区。

  3. 几乎所有图形语法转换都在GPU上处理,这允许并行计算的插值过渡。

它也可以在完全静态的设置中运行,因此你可以通过类似Github Pages的方式托管一个百万点的散点图。

Deepscatter是Atlas的底层图形引擎。它以NC-CC-BY-SA许可证提供,用于所有非商业用途。

示例

文档

查看自动生成的typescript文档以获取完整的方法和函数列表。

获取帮助

欢迎在Github上提出问题,即使是质量较低的问题。

还有一个专门的Deepscatter Slack,欢迎你加入。Nomic维护着一个discord服务器,其中有专门的Deepscatter和Atlas支持频道。

我从非常非技术的背景开始做这些事情,欢迎人们带着初级问题加入。

快速开始

导入模块

查看上面的arxiv示例以了解一些基本示例。

本地运行

首先,安装用Python编写的配套分块库,并在50000个一组的块中生成100万个测试数据点。

python3 -V # 需要Python 3.9.x或3.10.x
python3 -m pip install git+https://github.com/bmschmidt/quadfeather
quadfeather-test-data 1_000_000
quadfeather --files tmp.csv --tile_size 50_000 --destination tiles

然后设置这个库来运行。它将启动一个本地开发服务器。

npm i
npm run dev

如果你访问localhost:3344,你应该看到一个交互式散点图。要深入了解你所看到的,请打开index.html。 (在2021年,这个开发站点在Chrome中工作,不在Safari或Firefox中工作,因为它在webworker中使用ES6模块语法。模块的分发版本应该在所有浏览器中工作。)

你自己的数据

  1. 创建一个包含名为'x'和'y'列的CSV、parquet或feather文件。(或者一个包含xy列的feather文件)。任何其他列(分类信息等)都可以作为额外列包含在内。

  2. 将其分块:

cd deepscatter # 如果你还没在那里
quadfeather --files ../some-path-to/your-data.csv --tile_size 50000 --destination tiles
  1. 假设你的数据集有xy列,并且tiles文件夹在这个项目的根目录中,你可以通过运行以下命令来可视化数据
npm run dev

并在浏览器中打开http://localhost:3345/index-simplest-way-to-start.html

要编辑可视化或进行故障排除,请查看文件index-simplest-way-to-start.html,你应该能找到一个最基本的deepscatter实现。

探索index.html,并在http://localhost:3345/index.html渲染它,以获取更高级的示例。

注意:理想情况下,在未来的版本中,你将能够以不需要直接编码JSON的方式创建这些规格。

构建模块

npm run build

将在dist/deepscatter.es.js创建一个ES模块。导入这个模块的机制与index.html略有不同。

注意,这是一个ESM模块,因此需要你在代码中使用<script type="module">。 别担心!我们现在允许这么做!但要注意,这在运行非常旧浏览器的计算机上不起作用。

代码片段:

<div id="my-div"></div>
<script type="module">
  import Scatterplot from './dist/deepscatter.umd.js';
  f = new Scatterplot('#my-div');
</script>

查看index_prod.html以获取示例

这目前是用vite和rollup打包的。上面还有/将会有一个进一步的交互层,但核心绘图组件是分离的,应该作为一个独立的层工作,通过API支持绘图请求。

代码策略

任何直接改变API调用的交互逻辑都不属于这个库。这里唯一的交互代码是用于缩放和与点交互。

未来的代码库拆分

绘图组件和分块组件在逻辑上是相当分离的;我可能会将分块策略拆分成一个单独的JS库,称为'quadfeather'。

Apache Arrow仍然是必要的中间格式,但可以使用例如arqueroDuckDB的WASM端口从CSV文件生成。

API

这仍然可能发生变化,并且没有完全记录。API的编码部分模仿了Vega-Lite,但有一些小的区别,以避免深度嵌套的查询,并添加动画和抖动参数。

{
   encoding: {
     "x": {
         "field": "x",
         "transform": "literal"
     },
     "color": {
         "field": "year",
         "range": "viridis",
         "domain": [1970, 2020]
   }
}

已实现的美学

  1. x
  2. y
  3. size
  4. jitter_radius:抖动大小。API可能会改变。
  5. jitter_speed:抖动速度。API可能会改变。
  6. color(分类或线性:范围可以显式调用颜色比例,或接受任何d3-color名称。)
  7. x0(用于动画;在x0和x之间过渡)
  8. y0(用于动画;在y0和y之间过渡)
  9. filter。(这个库将过滤视为一种美学操作。)

计划中

  1. Symbol(将分类变量映射到单个字体中的单个unicode点;可能最多255个。)
  2. Label(全文标签)
  3. Image(像PixPlot)

抖动

抖动目前有点功能过载,但有些相当有趣。

抖动方法在'jitter_radius'字段的'method'键上设置。可能的值有:

  1. circle
  2. spiral
  3. time
  4. normal

原则

  1. 这是一个2D库。没有假3D。
  2. 中心缩放状态由d3-zoom处理。
  3. 使用缩放状态通过挂钩在Deepscatter顶部渲染其他层(注意on_zoom是直接设置的,_不是_通过prefs传入):
const scatterplot = new Scatterplot('#deepscatter');
scatterplot.on_zoom = (transform) => {...}
项目侧边栏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号