基于AntV G2构建瀑布图

Alt

本文由ScriptEcho平台提供技术支持

项目地址:传送门

基于AntV G2构建瀑布图

应用场景介绍

瀑布图是一种常见的图表类型,用于展示数据的累积变化情况。它可以直观地显示数据的增减幅度,广泛应用于金融、销售、运营等领域。

代码基本功能介绍

本代码使用AntV G2库实现了瀑布图的基本功能,包括:

  • 从远程数据源加载数据
  • 将数据转换为G2友好的格式
  • 使用堆叠条形图绘制瀑布图
  • 添加折线、标题和标签等辅助元素

功能实现步骤及关键代码分析说明

1. 数据加载和转换
chart
  .interval()
  .data({
    type: 'fetch',
    value: 'https://assets.antv.antgroup.com/g2/nivo-gain-lost.json',
    transform: [
      {
        type: 'fold',
        fields: [
          'lost > 100$',
          'lost <= 100$',
          'gained <= 100$',
          'gained > 100$',
        ],
      },
    ],
  })
  .transform([{ type: 'stackY' }]);
  • 使用fetch方法从远程数据源加载数据。
  • 使用transform方法将数据转换为G2友好的格式,包括将数据折叠为堆叠条形图所需的形式。
2. 绘制瀑布图
.encode('x', 'user')
.encode('y', 'value')
.encode('color', 'key')
.scale('x', { padding: 0.2 })
.scale('y', { domainMin: -100, domainMax: 100 })
.scale('color', {
  domain: ['lost > 100$', 'lost <= 100$', 'gained <= 100$', 'gained > 100$'],
  range: ['#97e3d5', '#61cdbb', '#e25c3b', '#f47560'],
});
  • 使用interval方法绘制堆叠条形图。
  • 使用encode方法指定数据的x轴、y轴和颜色映射。
  • 使用scale方法设置x轴和y轴的范围和比例。
3. 添加辅助元素
chart
  .lineY()
  .data([0])
  .style('lineWidth', 2)
  .style('stroke', '#e25c3b')
  .style('strokeOpacity', 1);

chart.call(titleLeft, '75%', 'lost', '#61cdbb');
chart.call(titleLeft, '20%', 'gain', '#e25c3b');
  • 使用lineY方法添加折线。
  • 使用call方法添加自定义标题。
4. 自定义标题函数
function titleLeft(node, y, text, fill) {
  node
    .text()
    .style('x', -10)
    .style('y', y)
    .style('text', text)
    .style('fontWeight', 'bold')
    .style('dy', -10)
    .style('transform', 'rotate(-90)')
    .style('fill', fill);
}
  • 创建一个自定义函数titleLeft来添加标题。
  • 使用node对象设置标题的位置、文本、样式和颜色。

总结与展望

开发这段代码的过程让我深入了解了AntV G2库的特性和功能。我学到了如何加载数据、转换数据、绘制瀑布图并添加辅助元素。

未来,我计划扩展该代码的功能,包括:

  • 支持多种数据源

  • 提供交互功能,如鼠标悬停和数据过滤

  • 优化代码结构和性能

    更多组件:



    获取更多Echos

    本文由ScriptEcho平台提供技术支持

    项目地址:传送门

    扫码加入AI生成前端微信讨论群:

扫码加入群聊

### 如何在Vue 3项目中使用AntV G2与TypeScript集成 #### 安装依赖库 为了能够在 Vue 3 中使用 AntV G2 并支持 TypeScript,需要安装必要的 npm 包。通过命令行工具执行如下指令来完成这些包的安装: ```bash npm install @antv/g2plot vue@next typescript --save ``` 此操作会下载并配置好 `@antv/g2plot` 和其他所需的开发环境组件。 #### 创建表实例 创建一个新的 `.ts` 文件用于定义表逻辑,在其中引入所需模块,并初始化一个简单的柱状作为例子[^1]: ```typescript import { Bar } from '@antv/g2plot'; const data = [ { type: '分类一', value: 20, }, { type: '分类二', value: 30, }, ]; // Step 1: 实例化形对象 const barPlot = new Bar('container', { title: { visible: true, text: '简单柱形' }, forceFit: true, padding: 'auto', data, xField: 'type', yField: 'value', }); // Step 2: 渲染表 barPlot.render(); ``` 上述代码片段展示了如何利用 AntV/G2 的 API 来构建基本的数据可视化控件。这里选择了条形来进行展示,当然也可以根据实际需求调整为其他类型的表。 #### 将表嵌入到Vue组件内 为了让这个表可以在基于 Vue 3 构建的应用程序里显示出来,还需要编写相应的单文件组件 (`.vue`) 。下面是一个完整的模板示例,它包含了 HTML 结构以及之前提到过的 TypeScript 脚本部分 : ```html <template> <div id="chart-container"></div> </template> <script lang="ts"> import { defineComponent, onMounted } from 'vue'; import { Bar } from '@antv/g2plot'; export default defineComponent({ name: "BarChart", setup() { function createBarChart(){ let containerDiv = document.getElementById('chart-container'); if (!containerDiv) throw Error("Container div not found"); new Bar(containerDiv as HTMLElement,{ title:{ visible:true,text:'简单柱形'}, forceFit:true,padding:'auto',data:[{type:"分类一",value:20},{type:"分类二",value:30}],xField:"type",yField:"value"}).render();} onMounted(() =>createBarChart()); return {}; } }); </script> <style scoped> #chart-container{ width:600px;height:400px; border:solid 1px #ccc;margin:auto;text-align:center;padding-top:50px;} </style> ``` 这段代码实现了当页面加载完成后自动渲染表的功能。注意这里的样式设置可以根据个人喜好做适当修改以适应不同的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值