首页 > 编程语言 >关于微信小程序中如何实现数据可视化-echarts动态渲染

关于微信小程序中如何实现数据可视化-echarts动态渲染

时间:2023-11-27 11:56:13浏览次数:43  
标签:canvas 微信 initChart chart ec 可视化 echarts

移动端设备中,难免会涉及到数据的可视化展示、数据统计等等,本篇主要讲解原生微信小程序中嵌入echarts并进行动态渲染,实现数据可视化功能。

基础使用

首先在GitHub上下载echarts
地址:https://github.com/ecomfe/echarts-for-weixin/tree/master
下载项目
解压压缩包,将ec-canvas文件夹放到我们的项目中
在需要使用的页面引入echarts

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

在页面中使用

<view class="line_chart">
  <ec-canvas class="chart" id="charts" canvas-id="mychart-line" ec="{{ ec }}"></ec-canvas>
</view>

先给echarts的父级元素设置高度

.line_chart {
  width: 100%;
  height: 550rpx;
  background: #fff;
}

然后就可以使用了

// 引入 echarts 文件,这里路径一定要正确,就是ec-canvas -> echart.js
import * as echarts from '../../../ec-canvas/echarts';

// 定义 initChart 方法
function initChart(canvas) {
  const chart = echarts.init(canvas, null, {
    height: 250, // 图表高
    // width: 100  // 图标宽
  });

  canvas.setChart(chart);

  // 此为配置项。配置图表展现样式与数据
  var option = {
    xAxis: {
      type: 'category',
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
      type: 'value'
    },
    series: [
      {
        data: [150, 230, 224, 218, 135, 147, 260],
        type: 'line'
      }
    ]
  };

  chart.setOption(option);

  return chart;
}


Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 此处的ec名称与wxml结构中命名保持一致
    ec: {
      // 使用 onInit 方法定义
      onInit: initChart
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onl oad(options) {
  },
})

echarts中,配置项与echarts文档中的配置项相同,按照官网的配置项进行开发即可。
配置项手册:https://echarts.apache.org/zh/option.html


动态渲染echarts

我们会根据业务场景,传入不同的数据进行动态渲染echarts,那么在这里charts实例就必须配置为全局

var chart = null; // 重要-保存chart为全局实例
// initChart必须为全局函数
function initChart(canvas) {
  chart = echarts.init(canvas, null, {
    height: 250,
  });
  canvas.setChart(chart);
  return chart;
}

当你的数据变化后,重新渲染echarts

 data: {
    ec: {
      onInit: initChart
    }
  },

  getData() {
    return { // 你配置的的options数据...... };
  },
  
  getCharts() {
      setTimeout(() => {
        // 由于chart被你定义为全局,所以这里可以直接获取
        // 通过setOption设置options数据,刷新图标
        chart.setOption(this.getData(), true)
      }, 1500)
    }

解决真机文字阴影

options配置中添加

   tooltip: {
     textStyle: {
       textShadowBlur: 10, // 去掉文字阴影
       textShadowColor: 'transparent', // 去掉文字阴影
     },
   },

解决图标模糊问题

在真机中echarts可能会出现分辨率低,图形模糊的情况,此时我们需要获取设备像素比给echarts做初始化设置。
微信小程序获取设备信息:wx.getSystemInfo

function initChart(canvas) {
  // 获取设备像素比
  const getPixelRatio = () => {
    let pixelRatio = 0
    wx.getSystemInfo({
      success: function (res) {
        pixelRatio = res.pixelRatio
      },
      fail: function () {
        pixelRatio = 0
      }
    })
    return pixelRatio
  }
  var dpr = getPixelRatio(); // 像素比

  chart = echarts.init(canvas, null, {
    height: 250,
    devicePixelRatio: dpr // 设置初始化像素比
  });
  canvas.setChart(chart);
  return chart;
}

此时图表的像素就会按照设配像素比进行渲染

另外
1、你可以将echarts封装成组件,通过observers监听数据的变化来实现echarts的动态渲染。
2、在渲染层面,你可以将 legendlabel 调色盘series拆开,这样可以方便你更好的管理数据。
3、微信小程序有分包限制,在这里我做的是echarts包的直接下载,可能会占一些体积,你可以在echarts官网上选择在线订制,只下载你需要的图表解来减少包的体积,官网:在线订制


如果你觉得本文章不错,欢迎点赞

标签:canvas,微信,initChart,chart,ec,可视化,echarts
From: https://www.cnblogs.com/wang-fan-w/p/17858948.html

相关文章

  • unapp(微信小程序)-跳转页面之后返回原页面保留原页面数据
    1.第一步:跳转至新页面1uni.navigateTo({2url:`/pages-tracerecord/hn-contact?add=${encodeURIComponent(JSON.stringify(3{4ID:this.operate.ClientID,5SiteID:this.operate.ShareID,6Source:"Tradings"7}))}`8});2.第二步:返回之......
  • 个人微信机器人接口
    请求URL:http://域名地址/sendText请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是string登录实例标识wcId是string接收人微信id/群idcontent是string文本内容消息返回数据:......
  • 微信小游戏开发怎么选游戏引擎
    微信小游戏现在非常的火,当我们下定决心做微信小游戏开发的时候,面临我们的第一个问题是怎么选一个H5的游戏引擎,那么今天本小编就来给大家分析一下目前能开发各大平台H5小游戏的游戏引擎和它们的优缺点。入选原则:(1)能一次开发,同时发布到多个游戏平台的游戏引擎;(android,IOS,......
  • 手机通讯录好备份,那微信通讯录怎么办
    6-8微信联系已经成为我们日常生活沟通联系最常用的渠道之一,那么对于通讯录的提前备份就越来越重要了,防患于未然。如果是手动一个个联系人去抄写备份的话会花很多时间,特别是有些通讯联系人比较多的朋友。这里有一个小工具《微信通讯录极速导出工具》,可以方便快速地一键导出所有的微......
  • 基于微信小程序的家庭财务管理系统
    (文章目录)详细视频演示请联系我获取更详细的演示视频具体实现截图技术栈后端框架SpringBootSpringBoot内置了Tomcat、Jetty和Undertow等服务器,这意味着你可以直接使用它们而不需要额外的安装和配置。SpringBoot的一个主要优点是它的自动配置功能。它可以根据你的项目......
  • 微信小程序开发周记(11.20-11.26)
    实现1:下拉生成颜色可以不断显示随机颜色。下拉刷新可以重置颜色列表,上拉触底可以延申显示内容。wxml:<!--pages/getc/getc.wxml--><buttontype="primary"bind:tap="navifunc">后退</button><viewclass="num-item"wx:for="{{colorList}}"wx:key=......
  • 微信小程序文件预览和下载-文件系统
    文件预览和下载在下载之前,我们得先调用接口获取文件下载的url然后通过wx.downloadFile将下载文件资源到本地wx.downloadFile({url:res.data.url,success:function(res){console.log('数据',res);}})tempFilePath就是临时临时文件路径。通过wx.openD......
  • 基于微信小程序的酒店管理系统设计与实现(源码+lw+部署文档+讲解等)
    (文章目录)详细视频演示请联系我获取更详细的演示视频具体实现截图[外链图片转存中...(img-Lkna8qpn-1700727246356)]技术栈后端框架SpringBootSpringBoot内置了Tomcat、Jetty和Undertow等服务器,这意味着你可以直接使用它们而不需要额外的安装和配置。SpringBoot的一......
  • 微信小程序 文字换行设置
    在wxml中的样式为block时,通过设置包裹文字的view的样式可达到换行,设置的属性为:word-break: break-word; 例:wxml和wxss<viewclass="text-format">超出的文字,超出的文字,超出的文字,超出的文字,超出的文字,超出的文字,<view>.text-form{word-break:break-word;......
  • 从外卖配送的视角看:可视化技术如何改变行业格局
    随着互联网技术的不断发展,外卖配送行业也迎来了快速发展的时代。而随之而来的是越来越多的用户对于外卖配送的质量和效率提出了更高的要求。如何让外卖配送更加可视化,成为了外卖配送行业亟需解决的问题。 外卖配送可视化是指通过技术手段,将外卖配送的整个流程进行可视化展示,让......