钉钉小程序中使用F2图表绘制条形图

摘要:
预览:要求:水平条形图(条形图);数据最大的直方图为橙色,数据最小的直方图为绿色,中间数据的直方图为蓝色;直方图的颜色是渐变的,左浅右深;y轴的当前月份为粗体,字体大小增加,如果小于10月,则在月份之前添加0;直方图顶部显示数据大小;图例显示最大和最小数据的颜色。Npm下载F2图表:npminstall@antv/My-f2页面部分:˂!

预览:
钉钉小程序中使用F2图表绘制条形图第1张

钉钉小程序中使用F2图表绘制条形图第2张

要求:

  1. 横向柱状图(条形图);
  2. 数据最大的柱状图用橙色(#ff6600),数据最小的柱状图用绿色(#33CC00),中间的数据的柱状图用蓝色(#1890ff);
  3. 柱状图颜色渐变,左浅右深;
  4. y轴的当前月份加粗,字号加大,不足10月的在月份前加0;
  5. 柱状图顶部显示数据大小;
  6. 图例显示最大数据和最低数据的颜色。

npm下载F2图表:

npm install @antv/my-f2

钉钉小程序中使用F2图表绘制条形图第3张

页面部分:

<!-- 使用F2图表,onInit方法是构建函数,这个是预览图2的 -->
<f2 onInit="onDrawTechnicalChart"></f2>      

JS部分:

  // 引入F2
  import F2 from "@antv/my-f2";      

  onDrawTechnicalChart(F2, config) {
    // 图表边距 自己调合适的
    config.padding = [20,30,35,45];  

    // 1. 创建新图表    
    const daily = new F2.Chart(config);
    // data为接口传来的数据,格式大概为[{month: '8月', value: 2}, {month: '7月', value: 1}]等
    const data = this.data.technicalData.allNum;

    // 2. 挂载数据 
    daily.source(data);
    // 获取当前月份,,实现要求4
    let nowDate = new Date();
    let nowMonth = nowDate.getMonth() + 1;
    if(parseInt(nowMonth) < 10) {
      nowMonth = "0" + nowMonth;      // 给小于10的月份前面加0,满足显示要求
    }

    // 3. 设置柱状图图形方向
    // 柱形图 transposed: false; 条形图 transposed: true;
    daily.coord({
      transposed: true
    });

    // 实现要求1、3
    // 4.(1)配置图形形状 interval: 柱状图; 其他的图的标识请去F2官网查询
    // 4.(2)配置图形颜色 color l(180): 旋转   0: 顶部颜色 1: 底部颜色
    // 4.(3)position('y轴*x轴')
    daily.interval().position('month*number').color('l(180) 0:#1890ff 1:#fff');

    // 5. 配置坐标轴
    // 配置month轴
    daily.axis("month", {
      line: {
        lineWidth: 1,
        stroke: '#ccc',
        top: true
      },
      label: (text, index, total) => {      // 配置month轴的显示
        if (text == nowMonth + "月") {      // 如果是当前月份,字体加粗变大
          return {
            stroke: '#0099ff',
            fontWeight: 'bold',
            fontSize: 14
          }
        }
        return {                            // 如果不是当前月份,字体正常
          stroke: '#0099ff',
          fontWeight: 'normal'
        }
      }
    })

    // 配置number轴
    daily.axis("number", {
      line: {
        lineWidth: 1,
        stroke: '#ccc',
        top: true
      },
      label: {
        stroke: '#0099ff',
      },
      grid: {
        top: true,
        lineDash: [5],
        lineWidth: 1
      }
    })

    // 实现要求2,找到最大最小的月份修改柱形图颜色
    // 单独改变某柱形条颜色
    let minNum = data[0].number;
    let maxNum = data[0].number;
    // 找到max数量和min数量
    for (var i = 1; i < data.length; i++) {
      if (data[i].number < minNum) {
        minNum = data[i].number;
      }
    }
    for (var i = 1; i < data.length; i++) {
      if (data[i].number > maxNum) {
        maxNum = data[i].number;
      }
    }
    daily.interval().position('month*number').color('month*number', (month, number) => {
      // 当数据大于2个月时 
      if (data.length >= 2) {
        if (number == minNum) {
          return 'l(180) 0:#33CC00 1:#fff'
        }
        if (number == maxNum) {
          return 'l(180) 0:#ff6600 1:#fff'
        }
      }
      return 'l(180) 0:#1890ff 1:#fff'
    })

    // 6. 配置tooltip
    daily.tooltip(false);

    // 7. 配置legend
    daily.legend({
      custom: true,
      position: 'top',
      align: 'right',
      itemWidth: 35,
      items: [
        { name: '最高', fill: '#ff6600', marker: 'square' },
        { name: '最低', fill: '#33CC00', marker: 'square' }
      ]
    });
    daily.render();
    // 8. 绘制文本
    const offset = 5;
    const canvas = daily.get('canvas');
    const group = canvas.addGroup();
    const shapes = {};
    data.forEach(item => {
      const point = daily.getPosition(item);
      const text = group.addShape('text', {
        attrs: {
          x: point.x + offset,
          y: point.y,
          text: item.number,
          textAlign: 'left',
          textBaseline: 'middle',
          fill: '#0099ff',
          fontSize: 16
        }
      });
      shapes[item.month] = text; // 缓存该 shape, 便于后续查找
    });
    return daily;
  },

免责声明:文章转载自《钉钉小程序中使用F2图表绘制条形图》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在阿里云 CentOS7.x 下 使用docker 部署 net core3.1Android Camera学习总结:如何在android中使用摄像头获取照片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# DataTable.Select() 筛选数据

有时候我们需要对数据表进行筛选,微软为我们封装了一个公共方法, DataTable.Select(),其用法如下: Select() Select(string filterExpression) Select(string filterExpression, string sort) Select(string filterExpression,stri...

微信小程序——data-*自定义属性

在jQuery的attr与prop提到过在IE9之前版本中如果使用property不当会造成内存泄露问题,而且关于Attribute和Property的区别也让人十分头痛,在HTML5中添加了data-*的方式来自定义属性,所谓data-*实际上上就是data-前缀加上自定义的属性名,使用这样的结构可以进行数据存放。使用data-*可以解决自定义属性混乱无...

vue图表组件使用,组件文档echarts

vue图表组件使用,组件文档echarts http://echarts.baidu.com/echarts2/doc/example.html vue组件手动封装barChart.vue <template> <div :class="className" :id="id" :style="{height:height,wi...

某公司基于FineBI数据决策平台的试运行分析报告

一、数据平台的软硬件环境 二、组织机构和权限体系 组织机构:平台中已集成一套组织机构,可以建立部门、人员。也可以与现有系统的组织机构集成,将组织机构导入到平台中。 功能权限:通过配置功能点URL的方式实现各个用户相应的BI访问权限。用户第一次访问受保护的资源(某个功能点)时,会发出访问请求,服务器接收到请求后会验证用户权限,如果没有通过验证则返回登录页面...

科大讯飞语音芯片xfs5152CE,分享遇到的一些坑

首先 芯片手册的I2C地址是写地址,是8位的,真正的地址是7位地址,应该是0x40,最低位是读写位,读置1,为0x81,写置0,为0x80. 如果是模拟I2C倒无所谓,最坑的是我用的是寄存器,所以必须要用7位地址才可以,这个地方坑了我好几天。 其次,在用uart串口的是时候,每次上电芯片会返回一个状态值0x4A,但I2C是不会主动返回的,需要你去读取 我是...

深入理解Binder(二),Binder是什么?

上篇文章深入理解Binder(一),从AIDL谈起我们介绍了AIDL的基本使用,用AIDL两个App的通信是实现了,可是又有小伙伴疑惑了,为什么使用AIDL就能够实现两个App之间的通信?本文我们就来详细说说这个问题。 Binder单从字面上理解,它有活页夹,粘合剂的意思,活页夹可以用来把两个东西夹在一起。在我们的Android系统中,Binder主要用来...