微信小程序实现Echarts图的动态实时刷新

在微信小程序绘制折线图时,选择Echarts。官网如下:https://echarts.apache.org/zh/index.html
效果如下:(由于为截取动态图,只有实时图片结果)
在这里插入图片描述

微信小程序中的应用,就看在微信小程序中使用Echarts。
在这里插入图片描述主要就是拷贝 ec-canvas 目录到新建的小程序项目下,然后做相应的调整。

github链接如下:https://github.com/ecomfe/echarts-for-weixin

然后正式开始在小程序中使用Echarts。我的需求是绘制温度随时间变化的折线图,温度和时间从服务器中获取,因为数据是实时刷新的,我们是10秒刷新一次数据,因此我想让折线图也动态实时刷新,于是设置刷新时间,不断刷新从服务起取数据,进而不断重新绘制图形,达到实时刷新的效果。

1.引入Echarts

(1)将ec-canvas文件拷贝下来放到你自己的项目中:
在这里插入图片描述
(2)在你需要使用Echarts的页面的json文件中引入Echarts

{
  "usingComponents": {
    "ec-canvas": "../../ec-canvas/ec-canvas"
  }
}

2.使用Echarts

在需要显示图表的页面的wxml中使用Echarts。

<view class="containera">
  <ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>

在wxss设置宽度和高度

ec-canvas {
  width: 100%;
  height: 100%;
}

注:如果页面有多张图表时,要调整高度。

3.js页面设置Echarts以及动态刷新

现在是最重要的js交互代码。
(1)先引入:如官网所述,找到对应的文件夹。

import * as echarts from '../../ec-canvas/echarts';

(2)设置图的格式。这里我使用的是折线图。

我这里是想要画温度随时间变化的折线图。x轴数据和y轴数据是从服务器中取出来的。

function line_set(chart, xdata, ydata) { //xdata, ydata分别表示x轴数据和y轴数据
  var option = {
  // 设置图的title、xAxis、yAxis
    title: {
      text: '温度随时间变化图',
      left: 'center'
    },
    color: ["#37A2DA", "#67E0E3", "#9FE6B8"],
    
    grid: {
      containLabel: true
    },
    tooltip: {
      show: true,
      trigger: 'axis'
    },
    xAxis: {
      name:'日期',
      axisLabel: {  //因为日期太长,显示不全,于是让横坐标斜着显示出来
        interval:0,  
        rotate:40  
     } ,
      type: 'category',
      boundaryGap: false,
      data: xdata,  //xdata是服务器读取的数据
    },
    yAxis: {
      name:'温度/℃',
      x: 'center',
      type: 'value',
      splitNumber:5,
      min: 30,
      max: 40,
      splitLine: {
        lineStyle: {
          type: 'dashed'
        }
      }
  
    },
    series: [{
      name: '温度',
      type: 'line',
      smooth: true,
      data: ydata  // ydata也是服务器取出来的数据
    }]
  };
  chart.setOption(option);
}

设置page中的数据:

data设置图表的ec,以及动态刷新的时间间隔

data: {
   
    ec: {
      lazyLoad: true
    },
    timer:''
  },

onload函数设置调用的函数,以及设置动态刷新的函数

onLoad: function (options) {
    var _this = this;
    this.getOption();
    this.setData({                    //每隔10s刷新一次
      timer: setInterval(function () {
        _this.getOption();
    }, 10000)
    })
  },

对应的wxml中的ec-canvas id

onReady: function () {
    this.oneComponent = this.selectComponent('#mychart-dom-bar'); 
  },

初始化图表:

init_chart: function (xdata, ydata) {           //初始化图表
    this.oneComponent.init((canvas, width, height, dpr) => {
        const chart = echarts.init(canvas, null, {
            width: width,
            height: height,
            devicePixelRatio: dpr // new
        });
        line_set(chart, xdata, ydata)
        this.chart = chart;
        return chart;
    });
},

从服务器接口中读取数据:

getOption: function () {        
  var _this = this;
  wx.request({
      url: 'https://*******/',    //你请求数据的接口地址
      method: 'GET',
      header: {
          "Content-Type": "application/json"
      },
      success: function (res) {
        console.log(res);
        _this.setData({      
          //将接口返回的数据data赋值给data
          data:res.data,     
        })
        //将读取的数据直接存储到list中,可以直接使用
        var temperature=[];
        var date=[];
        for (var i = 0; i < res.data.length; ++i) {
            temperature[i]=res.data[i].temperature;
            date[i]=res.data[i].date;
         }
        _this.init_chart(date,temperature)             
     },      
  })  
},

完整代码如下:

import * as echarts from '../../ec-canvas/echarts';


function line_set(chart, xdata, ydata) {

  var option = {
    title: {
      text: '温度随时间变化图',
      left: 'center'
    },
    color: ["#37A2DA", "#67E0E3", "#9FE6B8"],
    
    grid: {
      containLabel: true
    },
    tooltip: {
      show: true,
      trigger: 'axis'
    },
    xAxis: {
      name:'日期',
      axisLabel: {  
        interval:0,  
        rotate:40  
     } ,
      type: 'category',
      boundaryGap: false,
      data: xdata,
      // show: false
    },
    yAxis: {
      name:'温度/℃',
      x: 'center',
      type: 'value',
      splitNumber:5,
      min: 30,
      max: 40,
      splitLine: {
        lineStyle: {
          type: 'dashed'
        }
      }
      // show: false
    },
    series: [{
      name: '温度',
      type: 'line',
      smooth: true,
      data: ydata
    }]
  };
  chart.setOption(option);
}
Page({

  /**
   * 页面的初始数据
   */
  data: {
   
    ec: {
      lazyLoad: true
    },
    timer:''
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    var _this = this;
    this.getOption();
    this.setData({                    //每隔10s刷新一次
      timer: setInterval(function () {
        _this.getOption();
    }, 10000)
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    this.oneComponent = this.selectComponent('#mychart-dom-bar');
 
  },
  onUnload: function () {
    clearInterval(this.data.timer)
},
  init_chart: function (xdata, ydata) {           //初始化第一个图表
    this.oneComponent.init((canvas, width, height, dpr) => {
        const chart = echarts.init(canvas, null, {
            width: width,
            height: height,
            devicePixelRatio: dpr // new
        });
        line_set(chart, xdata, ydata)
        this.chart = chart;
        return chart;
    });
},
getOption: function () {        
  var _this = this;
  wx.request({
      url: 'https://******/',    //你请求数据的接口地址
      method: 'GET',
      header: {
          "Content-Type": "application/json"
      },
      success: function (res) {
        console.log(res);
        _this.setData({      
          //将接口返回的数据data赋值给data
          data:res.data,     
        })
        var temperature=[];
        var date=[];
        for (var i = 0; i < res.data.length; ++i) {
            temperature[i]=res.data[i].temperature;
            date[i]=res.data[i].date;
         }
        _this.init_chart(date,temperature)           
      },   
  })  
},

这样就实现了实时动态刷新的效果,每隔10s重新画图。

希望对看到这篇博客的人有帮助。

  • 36
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 72
    评论
微信小程序中可以使用echarts进行数据可视化展示。使用echarts需要先引入echartsjs文件,在小程序的wxml文件中添加一个canvas标签,然后在js文件中通过canvas的id获取到canvas对象,再通过echarts的API进行数据的渲染。具体步骤如下: 1. 在小程序中引入echartsjs文件,可以通过npm安装或者直接下载echarts.js文件。 2. 在小程序的wxml文件中添加一个canvas标签,并设置canvas的id和宽高属性。 ``` <canvas id="myChart" style="width: 100%; height: 400rpx;"></canvas> ``` 3. 在小程序js文件中获取到canvas对象,并创建echarts实例。 ``` const echarts = require('echarts'); // 引入echarts库 Page({ onReady: function() { // 获取canvas对象 const ctx = wx.createCanvasContext('myChart', this); // 创建echarts实例 const chart = echarts.init(ctx); // 设置数据 const option = { // echarts配置项 ... }; // 渲染数据 chart.setOption(option); } }) ``` 4. 在echarts的配置项中设置数据,例如: ``` const option = { title: { text: '柱状示例' }, xAxis: { data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] }, yAxis: {}, series: [{ name: '销量', type: 'bar', data: [5, 20, 36, 10, 10, 20, 5] }] }; ``` 5. 调用echarts的API进行数据的渲染,例如: ``` chart.setOption(option); ``` 以上就是在微信小程序中使用echarts进行数据可视化展示的基本步骤。需要注意的是,echarts小程序中的使用可能会受到一些限制,例如表的交互和动画效果可能会受到一定的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 72
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值