zoukankan      html  css  js  c++  java
  • 微信小程序折线图表折线图加区域图

    1.先来个效果图

    这里我用的是插件@antv/f2-canvas(安装的方法如下)

    npm init 此处如果直接使用官方npm install 可能会出现没有node_modules错误

    npm install --production 建议使用–production选项,可以减少安装一些业务无关的 npm 包,从而减少整个小程序包的大小

    npm i @antv/f2-canvas 安装微信小程序 F2 图表组件

    安装好依赖包之后,运行 (点击开发者工具顶部详情,勾选 使用npm模块,再点击菜单栏中工具下的构建npm即可运行)

     json文件里加这个

    "usingComponents": {
        "ff-canvas": "@antv/f2-canvas"
      }
    

    js文件

    const F2 = require('@antv/wx-f2');
    let chart = null;
    page({
    	data:{
    		opts: {
    	      lazyLoad: true
    	    },
    	},
    	// 折线图
      getMothElectro: function (type) {
        let that = this;
        // 体重曲线表
        app.post('/user/Charts', {
          type: type
        }).then((res) => {
          // console.log(res)
          that.setData({
            list: res.data.list
          })
          //这里是把后台返的数据做一下处理
       
          let arr = [];
          let array1 = [];
          let array2 = [];
          let weightArr = [];
          // for (let value of res.chart) {
          for (let i = 0; i < res.chart.length; i++) {
            let value = res.chart[i];
            if (value.weight == '') {
              value.weight = null;
            } else {
              value.weight = value.weight;
              weightArr.push(value.weight);
            }
    
            let item = {
              city: '',
              date: value.date,
              areaValue: [(value.low.toFixed(2)) * 1, value.hign.toFixed(2) * 1]
            }
            let item1 = {
              city: '',
              date: value.date,
              weight: value.weight
            }
            array1.push(item)
            array2.push(item1)
            arr = array1.concat(array2)
          }
    
    
          this.chartComponent = this.selectComponent('#column-dom');
          this.chartComponent.init((canvas, width, height) => {
    
           //这里是计算y轴坐标可以跟着数据变,区间小一点,自适应数据
            var min = ((Math.min.apply(Math, weightArr)).toFixed(1)) * 1;
            var max = ((Math.max.apply(Math, weightArr)).toFixed(1)) * 1;
            if (max - min <= 10) {
              max = max + 2;
            }
            if (min % 5 == 0) {
              min = min - 2;
            }
            if (min > res.chart[0].low) {
              min = parseInt(res.chart[0].low);
            }
            if (max < res.chart[res.chart.length - 1].hign) {
              max = parseInt(res.chart[res.chart.length - 1].hign);
            }
    
            let max3 = (((max - min) / 3) * 1 + min).toFixed(1);
            
            chart = new F2.Chart({
              el: canvas,
              width,
              height
            });
    
            chart.source(arr, {
              date: {
                range: [0, 1],
                type: 'timeCat',
                mask: 'MM/DD',
                tickCount: 5,
              },
              weight: {
                type: 'linear',
                tickCount: 4,
                ticks: [min, max3, (max - max3 + min).toFixed(1) * 1, max],
                formatter: function formatter(ivalue) {
                  return ivalue + 'kg';
                }
              },
              areaValue: {
                type: 'linear',
                tickCount: 4,
                ticks: [min, max3, (max - max3 + min).toFixed(1) * 1, max],
                formatter: function formatter(ivalue) {
                  return ivalue + 'kg';
                }
              },
             
            });
            chart.axis('areaValue', false);//这里的图表是双y轴,所以隐藏一个,把右边的隐藏
    
            chart.line({
              connectNulls: true // 配置,连接空值数据
            }).position('date*weight').shape('smooth').color('city', ['#EF597F']);
            chart.point({
              connectNulls: true // 配置,连接空值数据
            }).position('date*weight').color('city', ['#EF597F']).style({
              // stroke: '#EF597F',
              // lineWidth: 1
            });
    
            chart.area({
              connectNulls: true // 配置,连接空值数据
            }).position('date*areaValue').shape('smooth').color('city', ['#2ECBB1', '#2ECBB1']);
    
            chart.legend(false);
            chart.tooltip(false);
            chart.render();
            // 注意:需要把chart return 出来
            return chart;
          })
    
    
        })
    
    
        
      },
    })
    

     你的数据格式是这个样子的(如果返回格式不一致可自行处理)

     这个City字段,你也可以写标题,如果不写,就是后面图表配置颜色有个空字段,不然你的图表没有颜色,用其他非空的字段可能会报错,配置可以看@antv的官网,这是两个图表结合的

    wxml文件

    <view class="container_canvas">
    <ff-canvas id="column-dom" canvas-id="column" opts="{{ opts }}" />
    </view>
    

      

  • 相关阅读:
    IOS客户端Coding项目记录(二)
    IOS客户端Coding项目记录(一)
    IOS开发基础知识--碎片7
    图解域域树域林根域的含义
    Windows server 2012公用网络修改为专用网络
    Windows2012R2版本区别
    VMWare:vSphere6 企业版参考序列号
    Oracle快速测试连接是否成功
    Brocade300 commands
    也谈免拆机破解中兴B860av1.1(解决不能安装软件/解决遥控)
  • 原文地址:https://www.cnblogs.com/caoyuna/p/14475726.html
Copyright © 2011-2022 走看看