Skip to content

常见问题

概述

什么是 Graphic Walker?

Graphic Walker 是一个开源的 React 组件,用于交互式数据可视化。它提供了类似 Tableau 的拖拽界面来构建图表,基于图形语法(grammar of graphics)方法驱动。与传统 BI 平台不同,它可以直接嵌入到你的 React(或任何 Web)应用中。

Graphic Walker 使用什么许可证?

Graphic Walker 基于 Apache-2.0 许可证 (opens in a new tab) 发布。

支持哪些浏览器?

Graphic Walker 支持所有现代浏览器:Chrome、Firefox、Safari 和 Edge(最新两个版本)。不支持 Internet Explorer。

包体大小是多少?

@kanaries/graphic-walker 压缩后大约 1.5MB(包含 Vega-Lite 渲染引擎)。经过 gzip 压缩后,传输大小约为 400KB。

可以不使用 React 来使用 Graphic Walker 吗?

可以。该包导出了 embedGraphicWalkerembedGraphicRendererembedPureRendererembedTableWalker 函数,可以将组件挂载到任意 DOM 元素上。详见原生 JS 嵌入文档。

数据

Graphic Walker 能处理多大的数据?

在客户端模式下(传递 data 属性),性能取决于浏览器内存。参考指标如下:

数据集大小性能表现
< 10K 行极佳 — 交互即时响应
10K – 100K 行良好 — 复杂聚合时略有延迟
100K – 1M 行可用 — 建议使用服务端计算
> 1M 行请使用服务端计算

对于大型数据集,使用 computation 属性将处理任务委托给服务端。

支持哪些数据格式?

Graphic Walker 接受 JavaScript 对象数组(Record<string, any>[])作为数据。你可以从任何格式转换:

  • CSV:使用 Papa Parse (opens in a new tab) 或内置的文件上传功能
  • JSON:直接解析
  • 数据库:查询数据库并将结果传给 computation 属性
  • API:获取数据后传给 data 属性

能直接连接数据库吗?

浏览器组件无法直接连接。使用服务端计算模式:实现一个 computation 函数来查询数据库并返回结果。详见计算指南

渲染

Graphic Walker 支持 SSR(服务端渲染)吗?

Graphic Walker 需要浏览器环境来渲染。在 Next.js 等 SSR 框架中,使用 ssr: false 的动态导入:

import dynamic from 'next/dynamic';
 
const GraphicWalker = dynamic(
  () => import('@kanaries/graphic-walker').then(m => m.GraphicWalker),
  { ssr: false }
);

可以使用 SVG 代替 Canvas 渲染吗?

可以。在布局配置或 defaultConfig 属性中设置 useSvg: true

<GraphicWalker
  data={data}
  fields={fields}
  defaultConfig={{
    layout: { useSvg: true },
  }}
/>

SVG 渲染输出更清晰,但对大数据集可能较慢。

如何设置固定的图表大小?

使用 defaultConfig 属性:

<GraphicWalker
  data={data}
  fields={fields}
  defaultConfig={{
    layout: {
      size: { mode: 'fixed', width: 800, height: 600 },
    },
  }}
/>

自定义

可以隐藏部分 UI 吗?

可以。使用以下属性控制 UI 可见性:

属性效果
hideChartNav隐藏图表标签页导航
hideSegmentNav隐藏数据/可视化分段标签页
hideProfiling隐藏字段分布预览
toolbar.exclude隐藏特定的工具栏按钮

如何保存和恢复图表配置?

chart 属性接受 IChart[] — 图表规格数组。将此数组保存到后端或 localStorage,再传回即可恢复状态:

// Save
const charts = storeRef.current?.exportAllCharts();
localStorage.setItem('gw-charts', JSON.stringify(charts));
 
// Restore
const saved = JSON.parse(localStorage.getItem('gw-charts') || '[]');
<GraphicWalker data={data} fields={fields} chart={saved} />

故障排查

图表不渲染 — 显示空白区域

常见原因:

  1. 缺少数据:确保 data 是一个非空数组
  2. 缺少字段:确保 fields 数组中的键与数据匹配
  3. SSR 问题:如果使用 Next.js,用 ssr: false 导入(见上文)
  4. 容器大小:父元素必须有明确的高度

"Field not found" 错误

确保 fields 数组中的 fid 值与数据对象中的属性名完全匹配。字段 ID 区分大小写。

暗色模式不生效

确保使用的是 appearance 属性(而非已废弃的 dark 属性):

<GraphicWalker appearance="dark" data={data} fields={fields} />

性能较慢

  • 减小数据集大小或切换到服务端计算
  • 使用 hideProfiling={true} 禁用数据分析
  • 使用 Canvas 渲染(默认)而非 SVG