首页 > 编程语言 >在微信小程序上做一个「博客园年度总结」:在小程序上使用echarts

在微信小程序上做一个「博客园年度总结」:在小程序上使用echarts

时间:2022-11-01 08:34:13浏览次数:66  
标签:... canvas 微信 博客园 程序 chart ec data echarts

在博客园年度总结中,有2张柱状图,分别是月度新增随笔趋势和年度新增随笔趋势

本文继续介绍一下如何在小程序中使用echarts插入图表

1、下载依赖文件

地址:echarts-for-weixin

解压后将目录ec-canvas复制一份放到到自己项目中

 

2、修改json文件配置

如果你想在某个page下添加图表,找到那个page目录下的xxx.json文件,添加如下配置

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

3、代码逻辑

图表展示逻辑如下:

  1. 后端接口提供月度和年度数据,同时因为是柱状图,所以每组数据又分为横轴数据(横坐标)、纵轴数据(纵坐标);
  2. 微信端echarts能够接收这种动态数据,所以不能把数据源写死;

网上很多文章都是写死数据源的,找了很久才找到一些动态获取数据的例子

另外我已经在后端把数据处理了一次,使它贴合柱状图所需数据格式,传递到前端的形式如下

"month_result": [
        {
            "date": "2022-01",
            "value": 7
        },
        {
            "date": "2022-02",
            "value": 1
        },
        ... ...
        ... ...
    ],
    "year_result": [
        {
            "date": "2017",
            "value": 27
        },
        {
            "date": "2018",
            "value": 87
        },
        ... ...
        ... ...
    ]

 打开js文件,开始编辑代码

(1)导入echarts组件

import * as echarts from '../../ec-canvas/echarts'; //引入图表组件

 

(2)定义设置图表样式函数 (注意:这个函数写在Page外面)

//设置Echarts Option
function setOption(chart, x_data, y_data, interval) {
  var option = {
    grid:{  //折线图在当前容器的位置调整
      // x:50, //左侧距离左边的距离
      // y:50,  //顶部最高点距离顶部的位置
      // x2:80, // 右侧距离右侧的距离
      // y2:40,  //距离底部距离
      borderWidth:1,
      height: 120
    },
    xAxis: {
      type: 'category',
      data: x_data,  //['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
      axisLabel:{  // x轴文字倾斜
        interval:0,
        rotate:45,//倾斜度 -90 至 90 默认为0
        margin:10,
        textStyle:{
        fontWeight:"bolder",
        color:"#000000"
        }
      }
    },
    yAxis: {
      type: 'value',
      interval: interval,  // y轴间隔数
    },
    series: [
      {
        itemStyle:{
          // color: ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc']
          normal:{
            color:'#ee6666'  // 调整柱子的颜色
          }
        },
        data: y_data, //[10, 20, 30, 80, 50, 30, 66]
        type: 'bar',
        showBackground: true,
        // backgroundStyle: {
        //   color: 'rgba(180, 180, 180, 0.2)'
        // }
      }
    ]
  };
  chart.setOption(option);
  return chart;
}

代码说明

函数setOption()定义了4个参数

chart:echarts组件用到的参数

x_data: 柱状图横轴数据

y_data: 柱状图纵轴数据

interval: 柱状图纵轴间距(因为2个柱状图都用这个函数来定义样式,但是它们的纵轴数值差距较大,需要分开定义间距)

 

(3)定义渲染图表函数(注意:这2个函数写在Page内)

因为我要渲染2张图表,所以这里定义2个函数

ps.开始时只定义了一个函数,然后2张图都调用它,结果发现只渲染成功一个图,不知道为啥

barChartMonth: function (x, y) {
    this.echartsComponnet.init((canvas, width, height) => {
     const chart = echarts.init(canvas, null, {
      width: width,
      height: height
     });
    //  initChart(chart, x, y);
     setOption(chart, x, y)
     return chart;
    });
   },

barChartYear: function (x, y) {
    this.echartsComponnet2.init((canvas, width, height) => {
     const chart = echarts.init(canvas, null, {
      width: width,
      height: height
     });
    //  initChart(chart, x, y);
     setOption(chart, x, y)
     return chart;
    });
},

 x和y分别为柱状图横轴、纵轴数据;

在这个函数中调用了图表样式函数setOption();

另外,this.echartsComponnetthis.echartsComponnet2在后面的onLoad()中会定义

 

(4)在wxml文件中配置图表展示位置

打开所在页面的wxml文件,分别添加月度数据和年度数据的位置代码

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

... ...

<view class="ec_container">
    <ec-canvas id="mychart-dom-bar2" canvas-id="mychart-bar" ec="{{ ec2 }}"></ec-canvas>
</view>
... ...
... ...

其中<ec-canvas>标签中的id属性和ec属性我们定义了2个不同的值

 

(5)打开js文件,从后端接收数据传给echarts组件

先在data中配置echarts延迟加载,也就是给wxml中的ec-canvas标签中的ec属性赋值

data: {
    now_year: utils.get_now_year(),  //调用util.js中定义的获取当前年份函数
    blog_users: {},
    blog_info: {},
    blogs: {},

    ec: {
      lazyLoad: true // 延迟加载
    },
    ec2: {
      lazyLoad: true // 延迟加载
    }
  },

 然后在onLoad()中定义request请求,向后端请求数据,将数据传给渲染函数

onLoad(options) {

    this.get_blog_users()
    this.get_blog_info()
   
    let that = this
    this.echartsComponnet = this.selectComponent('#mychart-dom-bar')  //查找页面的echart组件位置
    this.echartsComponnet2 = this.selectComponent("#mychart-dom-bar2")

    wx.request({
      url: 'https://bingshuang.top:5000/api/blog/get_blogs',
      method: 'GET',
      data: {
      },
      success: (res) => {
    
        let month_data = res.data.month_result
        let year_data = res.data.year_result

        let x_data1 = month_data.map(x => x.date)  //使用map方法提取月度数据的日期和对应的value,日期为横轴,value值为纵轴
        let y_data1 = month_data.map(x => x.value)

        let x_data2 = year_data.map(x => x.date)
        let y_data2 = year_data.map(x => x.value)

        that.setData({
          blogs: res.data,
          x : x_data1,
          y : y_data1,
          m: x_data2,
          n: y_data2
        })
        // console.log(this.data.blogs)
        //给图表加上数据
        that.barChartMonth(that.data.x, that.data.y, 2)  //渲染月度数据
        that.barChartYear(that.data.m, that.data.n, 20)  //渲染年度数据
      }
    })
    
    
  },

先定义了2个参数,获取页面的echarts组件this.echartsComponnetthis.echartsComponnet2;

然后用request请求接口,获取月度数据和年度数据;

再把数据传给barChartMonth()barChartYear()即可;

 

参考文章:

微信小程序使用echarts获取数据并生成折线图

微信小程序中使用Echarts实现一图或多图展示

 

标签:...,canvas,微信,博客园,程序,chart,ec,data,echarts
From: https://www.cnblogs.com/hanmk/p/16833135.html

相关文章

  • 编译gRPC相关示例程序,undefined reference to `deflateInit2_'等相关错误解决
    编译gRPC相关示例程序时,出现如下链接错误:/home/suph/.local/lib/libgrpc.a(message_compress.cc.o):Infunction`zlib_compress(grpc_slice_buffer*,grpc_slice_buffer*......
  • 程序员修炼之道2
    为了找到未来的兴趣和生活,我决定看看《程序员修炼之道》这本书。现在,读完第一章后,这本书告诉我们如何成为一名合格的程序员,以及如何开发自己的程序和代码。在这本书中,我们......
  • 《程序员修炼之道》读后感
    抱着想找到未来的兴趣和生活的目的我选择了观看《程序员修炼之道-从小工到专家》这本书,目前看完了第一章,这本书向我们讲述了怎么样成为一个合格的程序员,以及怎样想出造出一......
  • 程序员修炼之道第四章读书笔记与感悟
      程序员修炼之道第四章读书笔记与感悟与其他工程技术一样,软件工程是一项充满细节的工作,跟踪这些细节需要集中精力。并且能够持续地做出大大小小的改进。最大的弱点就......
  • 程序员修炼之道
    在阅读了《培养程序员的方法:从工人到专家》之后,我收获了很多。从这本书中,我看到了这些前辈的经历,这给了我很多经验。基础对于软件工程非常重要。我们看到的干净、运行良好......
  • 10月读书笔记《程序员修炼之道——从小工到专家》
    本月,我进行了对《程序员修炼之道——从小工到专家》第二章注重实效的途径的学习。作者首先介绍了重复的危害。在最开始时,作者先分析了重复是怎么发生的,总共有四种......
  • 《程序员修炼之道:从小工到专家》读书笔记4
    在高质量软件中,你可以看到“架构的概念完整性”与“其底层实现”之间的关系。“实现”必须与(指导该实现的)“架构”保持一致,并且这种一致性是内在的、固有的。这正是变量名......
  • 程序员修炼之道第三章读后感
    第三章的标题是基础工具,这一章讲述了调试,命令,编辑器等等的东西。  首先,这一章讲了我们在调试方面必须很熟练,因为我们写的一切代码最终都是要运行的,而运行前......
  • Fiddler抓包小程序
    Fiddler 抓包小程序一、fiddler安装1、fiddler安装包下载:Fiddler.rar 2、解压后,运行.exe文件,一路next注:fiddler基础安装文档请参考:https://javaforall.cn/200751.htm......
  • 微信小程序登录后刷新不了页面,使用switchTab跳转后刷新不了页面
    效果图因为是tab页面不能用redirectTo,得使用switchTab,我使用switchTab但是登录后调用了刷新不了页面,导致数据没显示出来,下图是完成的效果图原先js代码wx.switchTab......