news 2026/9/27 10:18:20

F2 快速上手指南:从安装到绘制第一个声明式移动端图表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
F2 快速上手指南:从安装到绘制第一个声明式移动端图表
  • 数据可视化
  • 前端

【免费下载链接】F2

📱📈An elegant, interactive and flexible charting library for mobile.

项目地址:https://gitcode.com/gh_mirrors/f2/F2
点击查看免费下载

本指南基于 F2 官方快速上手文档,完整讲解移动端图表库 F2 的安装、JSX 转换配置、Canvas 画布创建与声明式图表编写流程。读完本文,你将能够在任意 Web 页面中独立完成一个可交互的 F2 柱状图,并理解Canvas、Chart、Interval、Axis、Tooltip等核心组件的职责与关键属性。

特性介绍

F2(@antv/f2)是面向移动端的数据可视化图表库,自 4.0 起采用声明式方式编写图表,带来了更直观的开发体验:

声明式

声明式编程让图表代码更直观、简洁,避免了复杂的命令式 API 调用。F2 采用 JSX 语法构建图表,不仅上手方便,还可以很方便地与 React、Vue 等前端框架结合(参见 框架使用概览)。

组件化

为了构建复杂的可视化图表,组件是不可或缺的能力。F2 参考了 React 的设计模式,内置了一套完善的组件体系,可以简单方便地封装自己的组件。在源码层面,从 组件统一出口 可以看出,F2 内置了Interval、Line、Area、Point、Axis、Legend、Guide、Tooltip、Treemap、Sunburst、PieLabel、Gauge、Zoom、ScrollBar、Candlestick、Pictorial、Magnifier、ElementLink等一批开箱即用的图表组件,同时每个组件都配套导出withXxx高阶组件与XxxView视图,方便开发者自定义封装。

安装

通过 npm 安装

在项目目录下执行:

npm install @antv/f2 --save

安装完成后,即可在项目中以模块方式引入。当前仓库中@antv/f2包版本为5.14.0(见 packages/f2/package.json),其依赖了@antv/f-engine(渲染引擎)、@antv/util、gl-matrix、d3-cloud(词云)等底层库。

通过 CDN 引入

如果不想使用构建工具,可以直接通过 CDN 引入 UMD 构建产物:

<script src="https://unpkg.com/@antv/f2/dist/index.min.js"></script>

在 packages/f2/package.json 中可以看到unpkg字段指向dist/index.min.js,即该包发布到 npm 后可直接用于 CDN 引用。

配置 JSX 转换

F2 使用 JSX 语法构建图表,因此需要在运行前对 JSX 语法进行编译。Babel 和 TypeScript 都可以编译 JSX,并且都存在Classic(经典)与Automatic(自动)两种编译模式,完整说明见 配置 JSX Transform。

注意:如果项目本身已经是 React,可以直接复用 React 的 JSX 运行时,参考 如何在 React 中使用 F2。

Babel 配置

首先安装编译插件:

npm install --save-dev @babel/plugin-transform-react-jsx

然后在babel.config.json中按模式配置:

Classic 模式(指定pragma为 F2 的jsx函数):

{ "plugins": [ [ "@babel/plugin-transform-react-jsx", { "pragma": "jsx", "pragmaFrag": "Fragment" } ] ] }

Automatic 模式(指定运行时与导入来源为@antv/f2):

{ "plugins": [ [ "@babel/plugin-transform-react-jsx", { "runtime": "automatic", "importSource": "@antv/f2" } ] ] }

TypeScript 配置

在tsconfig.json中同样支持两种模式:

Classic 模式:

{ "compilerOptions": { "jsxFactory": "jsx", "jsxFragmentFactory": "Fragment" } }

Automatic 模式:

{ "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "@antv/f2" } }

Automatic 模式编译出的 JSX 代码会从@antv/f2/jsx-runtime引入运行时函数。仓库中的 jsx-runtime.js 与 jsx-runtime.d.ts 均透出自@antv/f-engine/jsx-runtime,这正是 Automatic 模式下 JSX 运行时函数的真实来源,保证了@antv/f2可直接作为 JSX 导入源使用。

一分钟上手

下面用最简步骤绘制一张柱状图。

1. 创建 canvas 标签

在页面上放置一个<canvas>元素,宽度与高度即图表画布尺寸:

<canvas id="myChart" width="400" height="260"></canvas>

2. 编写代码

// F2 对数据源格式的要求是 JSON 数组,数组的每个元素是一个标准 JSON 对象 const data = [ { genre: 'Sports', sold: 275 }, { genre: 'Strategy', sold: 115 }, { genre: 'Action', sold: 120 }, { genre: 'Shooter', sold: 350 }, { genre: 'Other', sold: 150 }, ]; // 获取 canvas context const context = document.getElementById('myChart').getContext('2d'); const { props } = ( <Canvas context={context} pixelRatio={window.devicePixelRatio}> <Chart data={data}> <Axis field="genre" /> <Axis field="sold" /> <Interval x="genre" y="sold" color="genre" /> <Tooltip /> </Chart> </Canvas> ); const canvas = new Canvas(props); canvas.render();

完成上述两步之后,保存文件并用浏览器打开,一张柱状图就绘制成功了。整体结构一目了然:Canvas负责画布渲染环境,Chart装载数据,Axis声明坐标轴,Interval绘制柱状几何图形,Tooltip提供数据提示交互。

代码解析

Canvas 画布组件

Canvas是图表的根容器,负责提供渲染环境,其内部维护了渲染引擎实例(@antv/f-engine)并执行render()方法完成绘制:

属性类型默认值说明
contextCanvasRenderingContext2D-必填,Canvas 2D 上下文
pixelRationumberwindow.devicePixelRatio设备像素比,用于高清屏适配
widthnumber-画布宽度(优先使用 canvas 元素的 width)
heightnumber-画布高度(优先使用 canvas 元素的 height)
animatebooleantrue是否开启动画
childrenJSX.Element-通过 JSX 语法创建的 F2 组件节点(如<Chart />)

在实际使用中,pixelRatio默认取window.devicePixelRatio,因此在 Retina 等高清屏上也能保证图表清晰。

Chart 图表组件

Chart是图表的核心组件,负责数据处理和坐标转换。从 Chart 源码 可以看到,Chart在挂载时会初始化ScaleController(度量控制器)与CoordController(坐标系控制器),并在渲染时把data、coord、layout等上下文通过Children.cloneElement注入给每个子组件:

属性类型默认值说明
dataData[]-必填,数据源
scaleScaleConfig-度量配置
coordCoordConfig-坐标系配置
childrenJSX.Element-通过 JSX 语法创建的 F2 组件节点(如<Interval />、<Axis />等)

除此之外,Chart实例还向开发者暴露了一批实用方法与状态能力(均定义在 packages/f2/src/chart/index.tsx):

  • filter(field, condition):按字段条件过滤图表数据(对应内部_getRenderData实现);
  • highlight(field, condition):高亮符合条件的数据(其余图形透明度降为 0.5);
  • setScale(field, option)/getScale(field)/getScales():动态设置与读取字段度量;
  • getPosition(record):把一条数据记录转换为画布上的坐标点;
  • getSnapRecords(point):获取某个画布位置附近命中的数据记录(Tooltip 命中检测依赖于此);
  • on(eventName, listener)/off(...):绑定/解绑手势交互事件。

Interval 柱状图组件

Interval用于绘制柱状图,是最常用的几何标记(Geometry)组件之一:

属性类型默认值说明
xstring-必填,x 轴字段名
ystring-必填,y 轴字段名
colorstring \| Function-颜色字段或颜色映射函数

Axis 坐标轴组件

Axis用于配置坐标轴。从 withAxis.tsx 源码 可以看出,Axis不仅负责渲染坐标轴线、刻度与标签,还会在构造时把自身的度量配置(type、tickCount、range、mask、formatter、min、max、nice、ticks)通过chart.setScale(field, scaleOption)注册到Chart的度量控制器中——这就是在<Axis>上配置格式化函数、刻度个数等参数能生效的底层原理:

属性类型默认值说明
fieldstring-必填,字段名
positionstring-坐标轴位置(top、bottom、left、right)

此外Axis还支持type(度量类型,如cat分类、linear线性、timeCat时间分类)、tickCount(刻度数量)、formatter(刻度文本格式化函数)、min/max(数值范围)、nice(是否自动取整)等度量相关属性。

Tooltip 提示框组件

Tooltip用于显示数据提示信息。当用户在图表上触摸/悬停时,会弹出提示框展示命中的数据详情,其命中检测正是通过Chart的getSnapRecords与几何组件的快照机制完成的。

理解组件组合与更多组件

一个完整的 F2 图表由多个组件声明式组合而成,典型层级为:

Canvas (画布容器) └── Chart (图表核心) ├── Axis (坐标轴) ├── Geometry (几何标记:Interval / Line / Area / Point ...) ├── Tooltip (提示框) ├── Legend (图例) └── Guide (辅助标记)

几何标记的类型决定了图表类型:Interval对应柱状图,Line对应折线图,Area对应面积图,Point对应散点图。更多组件与图表的详细结构、核心术语(坐标轴、图例、几何标记、图形属性、坐标系、提示信息、辅助标记)可参考 核心概念。

更多示例

更多可运行的示例(柱状图、折线图、饼图、雷达图、漏斗图、关系图、动效案例等)请查看仓库 site/examples 目录,每个示例都包含可复制的*.jsx代码、配套的meta.json配置以及中英文说明文档。

下一步

  • 了解 核心概念与图表结构
  • 学习 图表语法(Graphic Grammar)
  • 查看 Chart 组件 API
  • 了解 如何在 React、Vue、小程序、Node.js 等框架中使用 F2
  • 数据可视化
  • 前端

【免费下载链接】F2

📱📈An elegant, interactive and flexible charting library for mobile.

项目地址:https://gitcode.com/gh_mirrors/f2/F2
点击查看免费下载

相关推荐

上一篇:Mac终极指南:5分钟快速导出微信聊天记录的完整解决方案
下一篇:免费AMD Ryzen调试工具SMUDebugTool:终极硬件掌控指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 10:14:32

嵌入式C++第一行代码:裸机环境下可运行的cpp_main实现

1. 这不是C入门课&#xff0c;是嵌入式系统里“动真格”的第一行代码你点开这个标题&#xff0c;大概率刚刷完三篇STM32 C教程——讲HAL库封装的、谈RAII在裸机中怎么模拟的、甚至还有人用模板元编程推导定时器重载周期的。但合上页面&#xff0c;手悬在键盘上&#xff1a;IDE里…

作者头像 李华
网站建设 2026/9/27 10:10:50

ARM体系架构与嵌入式软件工程:工具链、内存屏障与多核调度实战

1. ARM体系架构的底层逻辑&#xff1a;先搞清楚自己在写谁的代码1.1 指令集架构与处理器内核的“血缘关系”ARM这个词其实是个简称&#xff0c;它包含了两层意思&#xff1a;一层是指令集架构&#xff08;ISA&#xff09;&#xff0c;另一层是具体处理器内核。指令集架构定义了…

作者头像 李华
网站建设 2026/9/27 10:00:09

朝代时间线动画怎么做:从Excel静态表格到AI驱动的分镜MG动画

做朝代更替视频&#xff0c;Excel朝代表太死板&#xff1b;手动MG动画又得啃AE关键帧。一个可行做法是&#xff1a;把朝代更替写成逐字稿&#xff0c;交给像花生AI这类按语义匹配画面与动画的工具&#xff0c;由它拆分分镜、生成时间轴动画&#xff0c;再用自然语言指令微调。下…

作者头像 李华
网站建设 2026/9/27 9:51:10

196.排班

生产排班表和原材料入库记录很快送到了陈远手上。他坐在孙国平那间简陋的办公室里&#xff0c;将两份资料并排摊在桌上&#xff0c;开始逐行比对。办公室不大&#xff0c;一张办公桌、一台电脑、一个文件柜、几把椅子&#xff0c;墙上挂着一张金丰铸钢的组织架构图和几面锦旗&a…

作者头像 李华
网站建设 2026/9/27 9:49:33

武汉苔序间植物拓印课只给六片叶子,帆布袋图案会不会太受限?

武汉苔序间植物拓印课只给六片叶子&#xff0c;帆布袋图案会不会太受限&#xff1f; 武汉江岸区黎黄陂路的苔序间植物拓印工作室&#xff0c;周六有一节约 105 分钟的帆布袋植物拓印课。每位学员拿到同款米白帆布袋和六片老师事先挑好的新鲜叶片&#xff1b;学员可以自己决定叶…

作者头像 李华