首页/新闻资讯/正文详情

F2 玫瑰图(南丁格尔玫瑰图)开发指南:用极坐标半径表达数据大小

发布时间:2026/9/27 8:24:11 来源:云帆数科 栏目:资讯中心
F2 玫瑰图(南丁格尔玫瑰图)开发指南:用极坐标半径表达数据大小
数据可视化前端【免费下载链接】F2An elegant, interactive and flexible charting library for mobile.项目地址https://gitcode.com/gh_mirrors/f2/F2点击查看免费下载导读玫瑰图Rose Chart又称南丁格尔玫瑰图Nightingale Rose Chart是移动端图表库 F2 中一种特殊的饼图变体。与普通饼图用扇形角度表示数值不同玫瑰图通过扇区半径长短来映射数据大小因而能在角度均匀分配的前提下让数值差异更大、更细的分类数据一眼可辨。本文以 site/examples/pie/rose/index.zh.md 中的基础示例为核心结合 F2 仓库源码极坐标实现、Interval 几何标记从坐标系原理、JSX 声明式配置到运行效果完整讲解如何在 F2 中实现玫瑰图。读完本文你将能独立写出可运行的基础玫瑰图并理解其背后的极坐标映射与半径表达机制。一、玫瑰图是什么从南丁格尔到半径编码玫瑰图由护理学先驱弗洛伦斯·南丁格尔Florence Nightingale于 1858 年提出最初用于直观展示克里米亚战争中士兵的伤亡原因与月份分布。它的核心思想是分类维度均匀地分布在圆周上每个分类占据一个角度相等的扇形数值维度通过扇形的半径长度表达数值越大半径越长扇区面积越大。这种设计的价值在于当分类数据之间的数值差异较大例如人口从 25.8 到 46 跨越了近一倍时半径编码相比角度编码能产生更显著的视觉面积差从而更容易突出差异、对比强弱。在 F2 的官方示例目录中玫瑰图被归入 site/examples/pie/rose与饼图pie、环形图donut并列属于扇形类图表家族。官方文档总结其适用场景为展示数值差异较大的分类数据突出显示数据间的差异程度周期性数据的可视化展示需要同时展示分类和数值的场景。二、快速上手一个可运行的基础玫瑰图2.1 完整示例代码以下是仓库中 rose.jsx 的完整代码展示了玫瑰图的最小可运行配置/** jsx jsx */ import { jsx, Canvas, Chart, Interval, Legend } from antv/f2; const data [ { year: 2001, population: 41.8 }, { year: 2002, population: 25.8 }, { year: 2003, population: 31.7 }, { year: 2004, population: 46 }, { year: 2005, population: 28 }, ]; const context document.getElementById(container).getContext(2d); const { props } ( Canvas context{context} pixelRatio{window.devicePixelRatio} Chart data{data} coord{{ type: polar, }} scale{{ population: { min: 0, }, }} Interval xyear ypopulation coloryear / Legend positionright / /Chart /Canvas ); const chart new Canvas(props); chart.render();2.2 代码结构拆解这段代码由四层组成遵循 F2 一贯的声明式 JSX 语法层级组件作用画布Canvas绑定 canvas 2D 上下文设置pixelRatio适配高清屏图表Chart承载数据、坐标系与度量配置几何标记Interval声明数据字段映射x、y、color辅助组件Legend展示分类图例置于图表右侧其中最关键的是Chart的coord配置coord{{ type: polar }}是把普通柱状图变为玫瑰图的开关。在 F2 中同一个Interval几何标记配合直角坐标系默认rect渲染为柱状图配合极坐标系polar渲染为玫瑰图。2.3 字段映射的含义Interval xyear ypopulation coloryear /的映射逻辑如下xyear分类字段决定每个扇形在圆周上的位置角度维度ypopulation数值字段决定扇形的半径长度数值维度coloryear分类字段同时作为颜色分组每个年份一个颜色。三、原理深挖极坐标如何把柱子变成扇形要真正理解玫瑰图需要深入 F2 的坐标系层。玫瑰图的变形发生在 packages/f2/src/coord/polar.ts 的Polar类中它是直角坐标系基类 packages/f2/src/coord/base.ts 的子类。3.1 极坐标的值域语义直角坐标系rect.ts中x与y两个值域分别对应画布的水平与垂直方向。而极坐标系重新定义了值域语义见 polar.ts// 极坐标下 x 表示弧度y 代表半径 const x: Range [startAngle, endAngle]; const y: Range [innerRadiusRatio * radius, radius];也就是说在极坐标中x 轴不再是横坐标而是角度弧度范围从startAngle到endAngley 轴不再是纵坐标而是半径范围从内半径到外半径。这就解释了为什么同一份xyear、ypopulation的映射在极坐标下会渲染成沿圆周分布、半径各异的扇形——数据字段并没有变变的是坐标系的解释方式。3.2 关键默认参数从 polar.ts 可以看到极坐标的默认行为参数默认值含义radius半径比例1外半径 radiusRatio * min(width, height) / 2默认取画布宽高较小者的一半保证扇形完整落在画布内innerRadius内半径比例0为0时是实心玫瑰图大于0时呈现环形效果startAngle-Math.PI / 2起始角度即从 12 点钟方向开始绘制endAngle(Math.PI * 3) / 2终止角度与起始角度相差整圆2π需要说明的是coord{{ type: polar }}只是最简写法这些参数都可以进一步显式配置例如coord{{ type: polar, innerRadius: 0.5, startAngle: 0, endAngle: Math.PI }}可以做出从 3 点钟方向开始的半圆环形玫瑰。3.3 坐标转换的数学本质极坐标把归一化坐标点转换为画布坐标的核心逻辑在convertPointpolar.tsconst angle xStart (xEnd - xStart) * point[xDim]; const radius yStart (yEnd - yStart) * point[yDim]; return { x: center.x Math.cos(angle) * radius, y: center.y Math.sin(angle) * radius, };point[xDim]0~1 的归一化分类比例被线性映射为圆周上的弧度point[yDim]0~1 的归一化数值比例被线性映射为半径长度再通过三角函数展开为画布上的笛卡尔坐标点。而isCyclic()方法polar.ts判断角度跨度是否达到2π用于识别循环坐标系这是极坐标区别于直角坐标的又一特征。四、Interval 几何标记从柱状图语义到玫瑰图尺寸玫瑰图复用的是 F2 的Interval几何标记柱状图几何而不是独立的图表类型。这一点在 withInterval.tsx 的getDefaultSize方法中有直接证据const defaultWithRatio { column: 1 / 2, // 直方图、柱图 rose: 0.999999, // 玫瑰图 multiplePie: 3 / 4, // 多饼图 }; let ratio; if (coord.isPolar) { if (coord.transposed count 1) { ratio defaultWithRatio.multiplePie; } else { ratio defaultWithRatio.rose; } } else { ratio defaultWithRatio.column; }这段代码的含义判断依据是coord.isPolar当坐标系是极坐标时Interval自动按玫瑰图rose逻辑计算尺寸否则按柱状图column逻辑玫瑰图占比0.999999几乎等于1即每个分类的扇形在圆周上首尾相接、不留间隙从而形成连续完整的玫瑰花瓣效果多饼图占比3/4当极坐标配合transposed转置且分类数大于 1 时自动切换为多饼图布局。也就是说同样的几何标记会根据坐标系自适应尺寸策略这是 F2语法式图表设计的典型体现。五、渲染细节扇形如何被绘制与动画玫瑰图的扇形由极坐标视图 view/polar.tsx 负责渲染。它把经过坐标映射后的矩形关键点xMin、xMax、yMin、yMax翻译成sector扇形图形sector key{key} attrs{{ cx: center.x, cy: center.y, fill: color, lineWidth: 1, startAngle: ${xMin}rad, endAngle: ${xMax}rad, r0: yMin, r: yMax, ...shape, }} /可以看到Interval在直角坐标系下产出的柱形关键点在极坐标下被直接解读为扇形的起始角、终止角、内半径与外半径从而渲染为扇形。该视图还内置了入场动画整体以sector类型的裁剪动画从startAngle扫到endAngle展开polar.tsx数据更新时则对startAngle、endAngle、r0、r等属性做平滑过渡。六、数据与度量为什么population要设min: 0示例中scale配置对玫瑰图有特殊意义scale{{ population: { min: 0, }, }}必须从 0 开始玫瑰图用半径表达数值如果度量不从 0 开始最短的半径将不是 0导致所有扇区都缩水为环状破坏半径与数值的线性对应关系保持比例真实设min: 0后半径与数值严格线性相关数值差异才能被忠实呈现。因此min: 0是玫瑰图几乎必备的度量约束与柱状图非零基线的要求一脉相承。示例数据中population的最小值 25.8 远大于 0若不设min: 0则最小扇区会退化为一个窄环玫瑰图半径对比的视觉优势将大打折扣。七、在 F2 工程中运行示例本文示例来自 F2 的示例站点源码site/examples/pie/rose/demo/rose.jsx运行时需要页面中存在canvas idcontainer元素代码通过document.getElementById(container).getContext(2d)获取绘图上下文设置pixelRatio{window.devicePixelRatio}在高分屏如 Retina 屏上保证图表清晰从antv/f2导入jsx, Canvas, Chart, Interval, Legend五个成员使用new Canvas(props)创建画布实例并调用chart.render()完成渲染。官方文档还指出玫瑰图常与以下能力组合使用形成更丰富的应用环形玫瑰图通过coord的innerRadius配置留出中心空洞图例交互Legend支持点击筛选点击某个年份可隐藏对应扇形动态数据玫瑰图支持数据更新动画扇形半径随新数据平滑伸缩与其他图表混排在Canvas内可同时放置多个Chart实现仪表盘式组合视图。八、延伸从玫瑰图到整个极坐标图表家族理解了coord.type决定几何标记渲染形态这一核心机制后可以轻松延伸出更多极坐标图表配置组合渲染结果coord{{ type: polar }}Interval玫瑰图本文主题coord{{ type: polar, innerRadius: 0.5 }}Interval环形玫瑰图 / 南丁格尔环形图coord{{ type: polar, transposed: true }}Interval多饼图multiplePie 尺寸策略自动生效coord{{ type: polar }}Line雷达图coord{{ type: polar }}Area面积雷达图这一设计正是 F2图形语法Grammar of Graphics思想的体现坐标系Coord、几何标记Geometry、度量Scale、颜色Color四个维度自由组合即可从柱状图变形出玫瑰图、雷达图等一系列图表无需引入额外组件类型。仓库中 packages/f2/src/coord/index.ts 同时导出Rect与Polar两种坐标系配合 components/interval 的多种视图intervalView、polar、polygonView共同构成这套灵活的渲染体系。结语玫瑰图是 F2 中用坐标系换图表类型思想的经典案例一份Interval声明在rect坐标系下是柱状图在polar坐标系下就是南丁格尔玫瑰图。本文从官方示例出发结合 polar.ts 的极坐标值域语义、withInterval.tsx 的玫瑰尺寸策略以及 view/polar.tsx 的扇形渲染细节完整还原了玫瑰图的实现链路。实际开发时只需记住两个要点coord设为polar数值度量设min: 0即可快速交付一张语义清晰、适合移动端展示的玫瑰图。赞分享数据可视化前端【免费下载链接】F2An elegant, interactive and flexible charting library for mobile.项目地址https://gitcode.com/gh_mirrors/f2/F2点击查看免费下载相关推荐Plotly.py 旧版极坐标图Legacy Polar Charts从 go.Scatter(r, t) 到 Area 风向玫瑰图的迁移指南Plotly.py 旧版极坐标图Legacy Polar Charts从 go.Scatter r, t 到 Area 风向玫瑰图的迁移指南 极坐标图P数据可视化数据分析Plotly.py 风玫瑰图Wind Rose Chart完整指南用 px.bar_polar 与 go.Barpolar 绘制极坐标风速风向分布Plotly.py 风玫瑰图Wind Rose Chart完整指南用 px.bar_polar 与 go.Barpolar 绘制极坐标风速风向分布 导读数据可视化数据分析上一篇GoogleTest 1.8.1 自定义注入点Customization Points完全指南从宏覆盖到跨平台移植下一篇大型数据库对比性能优化指南DBeaver高效比较方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

电脑虚拟主机避坑指南:5个关键注意事项教你省下30%预算
电脑虚拟主机避坑指南:5个关键注意事项教你省下30%预算

电脑虚拟主机避坑指南:5个关键注意事项教你省下30%预算 找建站公司怕被坑高价?别急,先看看你选的电脑虚拟主机是否踩了这些坑。很多站长花了大价钱,网站却卡得像PPT,核心问题往往出在虚拟主机的 注意事项… · 2026/9/27 8:24:05

如何攻击Wordpress站点常见报错与解决
如何攻击Wordpress站点常见报错与解决

5个WordPress安全陷阱与防御注意事项 改个需求建站公司拖一周,这种憋屈感谁懂?刚上线的WordPress站点,后台改个按钮颜色,外包团队说“底层逻辑冲突”,得排期。结果第二天网站直接变白屏,或者更糟——被黑客植入了恶意代码,SEO收… · 2026/9/27 8:23:47

themeforestwordpress新手避坑速查手册:别花冤枉钱
themeforestwordpress新手避坑速查手册:别花冤枉钱

themeforestwordpress新手避坑速查手册:别花冤枉钱 网站做好了没人访问,比没做还让人焦虑。你盯着后台那可怜个位数的UV,心里直打鼓,是不是域名没选对?是不是服务器太慢?别急,这大概率不是玄学,而是技术选型和基础配置的硬伤。… · 2026/9/27 8:23:47

isomorphic-git 请求头(Headers)完全指南:Authorization、User-Agent 与自定义 Headers 的浏览器与 Node 兼容性
isomorphic-git 请求头(Headers)完全指南:Authorization、User-Agent 与自定义 Headers 的浏览器与 Node 兼容性

开发工具 【免费下载链接】isomorphic-git A pure JavaScript implementation of git for node and browsers! 项目地址: https://gitcode.com/gh_mirrors/is/isomorphic-git 点击查看 免费下载 导读 isomorphic-git 是一款纯 JavaScript 实现的 Git,可… · 2026/9/27 9:05:24

TypeScript 枚举(Enum)实战全解:深入 The Concise TypeScript Book 的编译原理与类型系统
TypeScript 枚举(Enum)实战全解:深入 The Concise TypeScript Book 的编译原理与类型系统

文档教程 【免费下载链接】typescript-book The Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source. 项目地址: https://gitcode.com/gh_mirrors/typ/typescript-book 点击查看 免费下载 TypeScript 的 enu… · 2026/9/27 9:05:18

Haskell 数据分析与处理工具库实战指南:解读 learnhaskell 仓库的 libraries.md
Haskell 数据分析与处理工具库实战指南:解读 learnhaskell 仓库的 libraries.md

教程 【免费下载链接】learnhaskell Learn Haskell 项目地址: https://gitcode.com/gh_mirrors/le/learnhaskell 点击查看 免费下载 导读 learnhaskell 是一个面向初学者的 Haskell 学习路径仓库,而 libraries.md 是其中一张"工具地图"——它… · 2026/9/27 9:05:18

网站建设软件有哪些内容揭秘,最佳实践避坑指南
网站建设软件有哪些内容揭秘,最佳实践避坑指南

网站建设软件有哪些内容揭秘,最佳实践避坑指南 网站做好了没人访问,这大概是老板们最头疼的事。钱花了几万,页面上线了,流量却比脸还干净。别急,这往往不是技术不行,而是你在选型和部署阶段就埋下了“死局”。… · 2026/9/27 9:05:12

排水管网检测手段怎么选?CCTV、声呐与管道机器人
排水管网检测手段怎么选?CCTV、声呐与管道机器人

一、先问一个问题:这次检测,管道里有多少水 排水管网检测手段的选择,第一个决定因素不是设备贵不贵,而是管内水位。同样一段管道,满水和半水状态适用的手段完全不同。把这一点先定下来,选型就成功了一半。… · 2026/9/27 9:05:00

服装公司网站怎么做才不亏?源码下载避坑全攻略
服装公司网站怎么做才不亏?源码下载避坑全攻略

服装公司网站怎么做才不亏?源码下载避坑全攻略 找建站公司最怕什么?怕被坑高价,更怕钱花出去了,手里连个像样的 源码下载 链接都拿不到,或者拿到一堆加密过的“黑盒”代码。干了十年建站,见过太多服装老板在装修完官网后,因为服务器到期、供应商跑路… · 2026/9/27 9:04:53

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码