pythonic生物人

ECharts迎来强力对手,又一个Grammar of Graphics 类工具!

TanStack Charts并不是又一个"图表库",而是在尝试把ggplot2的图形语法思想带到现代Web开发中。

如果你熟悉Grammar of Graphics,它会让你有一种似曾相识的感觉。

ImageImage


TanStack Charts最大的特点,不是图表,而是表达方式

多数图表库都是围绕"图表类型"设计的。例如:

  • Line Chart
  • Bar Chart
  • Pie Chart
  • Scatter Chart

需要什么图,就调用对应组件。

这种方式简单直接,但当图形越来越复杂时,往往需要不断叠加插件、自定义图层或者各种Hack,代码维护成本也随之增加。

TanStack Charts则采用了另一种思路。

它并没有把"折线图""柱状图"作为核心概念,而是把图形拆解成一个个更基础的元素(Mark),再通过数据映射(Channel)和比例尺(Scale)组合成最终的图表。

例如,一个scatter-bubble,

defineChart({
    marks: [
      dot(rows, {
        x: 'culmen_length_mm',
        y: 'culmen_depth_mm',
        color: 'species',
        r: 'body_mass_g',
        rScale: {
          scale: () => scaleSqrt().range([3, 11]),
        },
        fillOpacity: 0.78,
        stroke: 'currentColor',
        strokeOpacity: 0.28,
        strokeWidth: 0.75,
      }),
    ],
    x: { scale: scaleLinear, grid: true, axis: { label: 'Bill length (mm)' } },
    y: { scale: scaleLinear, grid: true, axis: { label: 'Bill depth (mm)' } },
    color: {
      range: groupRange,
      legend: colorLegend({ label: 'Species' }),
    },
  })
}

你只需设定x、y对应的变量,其它交给Chart Engine。

Image

如果熟悉ggplot2,这种思路应该并不陌生。

无论最终画的是折线图、面积图还是散点图,本质上都是不同图元之间的自由组合。

这种设计最大的优势,就是复杂图形不再依赖大量特殊组件,而是由简单元素逐步构建出来。


写在最后

这些年,图表库一直在比拼"支持多少种图"。

TanStack Charts更关心的是另一件事:如何用尽可能少的基础元素,组合出尽可能丰富的数据表达。

这种思路和ggplot2、Vega-Lite、Observable Plot一脉相承,也代表了近年来数据可视化的发展趋势。

项目地址:https://github.com/TanStack/charts

往期精彩

2026可视化工具TOP3

复现IF50.0期刊上6张图

复现Science正刊图

复现顶刊forestplot

师姐认为你会的55个科研图表

师弟师妹偷偷用的7大科研图表

复现Nature中的PCA图

复现Cell图