手把手教你玩转Echarts(一) !

前言

一直想写一篇关于echarts的文章,因为之前接触的echarts也不多,几乎没怎么用过。之前写过移动端用过一两次echarts, 不过都是看官方文档配置硬凑出来的,比较花时间。这次也是因为换新工作了,公司要求三天出一个大屏可视化页面,由于之前一直是写后台管理的,内容也比较简单,所以当时接到这个需求还是有点子慌的😭。不过程序员嘛,不是在学习就是在学习的路上,慌归慌,工作还是要照常的,对你有困难的东西才是挑战,等你会了就会觉得。。 嗯,真香~

你可以学到什么?

说的有点子多了哈,归根结底,授人以鱼不如授人以渔。通过这篇文章,你会学到什么?

  • 图表如何自适应
  • 折线图区域配置
  • 条形图自定义渐变色
  • 自定义图表字体、图例样式
  • x、y轴的轴线设置以及一些细节处理
  • 如何配置复合型双轴乃至多轴数据
  • 还有其他细节部分(是否平滑、字体位置、颜色…等等)

最最重要的一点,看完本篇文章,你会形成一个图表思维:需求来了,我该配置什么一目了然。本篇文章可能过长,大家可以选择性查看。

话不多说,接下来我们来讲一下`echarts`到底怎么写.最后我会给出一个规律性的小结,以后大家如果也碰到echarts,麻麻再也不担心我不会啦!如果本文有不足的地方,恳请斧正。当然如果大家觉得对你有用的话,码字构思不易,记得给小仙女点个赞哟~ (笔芯❤️)

UI图表样例

先说一下我们的设计图,涉及到的echarts的几种图标的类型,接下来我会按照难度划分,按照图表类别从易到难来详细讲一下。

Echarts基本使用

这里我司使用的技术栈为nuxt.js+echarts,这里nuxt.js怎么使用我就不讲了,这个不是本篇文章讲述的重点,就讲一下最常见的vue-cli的使用方式。

1. 安装echarts依赖
npm i echarts -S
2. 全局挂载在vue原型上

改写main.js

import Vue from 'vue'
import App from './App'
import router from './router'

// 引入echarts
import echarts from 'echarts'
Vue.prototype.$echarts = echarts

Vue.config.productionTip = false

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})
3. 模版中使用
<template>
  <div>
    <div id="main" style="width: 500px;height:400px;"></div>
  </div>
</template>

<script>
const option = {
  title: {
    text: "ECharts 入门示例"
  },
  tooltip: {},
  legend: {
    data: ["销量"]
  },
  xAxis: {
    data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
  },
  yAxis: {},
  series: [
    {
      name: "销量",
      type: "bar",
      data: [5, 20, 36, 10, 10, 20]
    }
  ]
};
export default {
  data() {
    return {
      option: option
    };
  },
  mounted() {
    this.drawChart();
  },
  methods: {
    drawChart() {
      var myChart = this.$echarts.init(document.getElementById("main"));
      // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(this.option);
    }
  }
};
</script>

到这里已经基本可以出来一个基本的柱状图了,恭喜你,已经完成了第一步。

4. 小tip :

如果我们在drawChart中从后台异步获取了数据,在这个步骤里进行初始化init,到前台展示接口返回数据可能会有一定的延迟,页面很有可能报错 会报错 Cannot read property 'getAttribute' of null,也就是说无法获取图表的dom元素,也就无法加载图表进行初始化操作,那么这个时候需要你在mounted周期里先初始化一次,会较为稳妥一些。

好的,上面我们已经进行了一个柱状图的基本生成。下面我们来讲一下echarts图表的个性化定制吧。

个性化定制

自适应问题

echarts图表的个性化定制前,有一点是大家比较关心的问题,就是echarts图表生成后,我该如何让它自适应呢?

自适应的方法有很多种,这里我简单说一下vwvh的方式。

vw:视窗宽度的百分比(1vw 代表视窗的宽度为 1%)如果设计稿为1920,那么10%就是192px
vh:视窗高度的百分比, 一般设置body为height:100vh,则会占满整个屏幕。
vmin:当前 vw 和 vh 中较小的一个值
vmax:当前 vw 和 vh 中较大的一个值

方案一

要使echarts能够自适应,思路就是首先能让他显示出来,如果没有给它设置高度,那么它的高度则为0;
其次,如果直接给它设置固定的像素px值,则不会自适应。换个思路,我们可以给它的父级元素设置一个vh值,然后给图表设置height:100%。举个🌰,可以给它父级盒子设置30vh,像这样

<div style="height:30vh;">
  <div id="main" style="height:100%;"></div>
</div>

它会随着你视口高度的变化而变化,当然这种方式也有缺陷,就是如果视口宽度改变它会不会进行自适应,答案是不会。vw和vh只使用一种,要么让他宽度自适应,要么让他高度自适应,并且可以搭配rem的方式来进行字体大小的改变。再详细的我就不说啦,大家可以参考这一篇vw、vh使用详解或者这一篇点击这里

方案二

使用postcss-px-to-viewport,可以将px单位自动转换成viewport单位,vw表示屏幕的1%。
考虑到本文的篇幅,这里不讲具体插件怎么配置了,但是会附上相关文章,可以参考vue-cli中使用postcss-px-to-viewport 将px转换成vw
使用的效果是这样:

因为vw本身就是css3的新单位,其原理就是插件自动会帮你把px转为vw单位,以达到窗口自适应的效果。

方案三

方式有很多,可以使用百分比布局,也可以rem布局,就是使用js控制根字体html字体的大小。具体的不详述了。

个人理解

接下来,我会讲一下各个不同图表的配置。 echarts图表生成的过程就是配置驱动, 当然这只是我自己的理解,可能不完全准确。

同学们来了,划重点!

只有当我们熟知哪些类型的图,应该给他一些什么相应的配置。比如x轴可以配置一些什么东西、y轴可以配置一些什么属性、series又代表了什么。我们要做的不是记得echarts图表所有的属性,这个完全是没有意义的,而是我们需要当一个类型的图表需求来时,应该去做些什么。那么接下来看看我们需要了解哪些?

补充

对于评论区有人说使用mychart.resize()方法就可以的,这点我表示赞同,不过resize方法仅针对图表的父容器,以上所说是针对全局做的自适应.

那些你必须知道的 前置 知识

有一些是我们必须了解的基本配置,因为他们是很多类型图表的都具备属性,知道这些,我们可以省掉很多查找的时间。当然,这里并不是全部。

  • title: 标题组件,包含主标题和副标题。默认在左上角的那个灰色的超级大的标题。
    它是一个对象,这里我只讲平时可能会用到的常用的属性:
    title: {
        show: true,
        text: '我是主标题',
        textStyle: {
            fontSize: 12,   // 标题字体大小
            color: '#333'   // 标题颜色
        }
        ...                 // 其他属性
    }
    
  • legend: 图例组件。可以通过点击图例控制哪些系列不显示,这里我用的最多的是控制图例显隐与位置。
    legend: {
        show: true, // 默认为true,可以设置false不显示
        right: '10%',   // 控制图例显示的位置,默认居中。这里值可以为数值或百分比
        top: 'top',
        ...
    }
    
  • grid: 直角坐标系内绘图网格,默认是不显示网格的。这里我用的最多的是利用grid来控制图表的拉伸
    grid: {
        top: '3%',  // grid 组件距离 容器顶部的距离
        left: '5%'  // grid 组件距离 容器左侧的距离
    }
    
  • xAixs: 直角坐标系 grid 中的 x 轴.可以为数组,也可以为对象。为对象时表示只有一个x轴,如果是数组是多根x轴的配置。一般情况下单个 grid 组件最多只能放上下两个 x 轴,多于两个 x 轴需要通过配置 offset 属性防止同个位置多个 x 轴的重叠。那么我们来看下默认的x轴常用的配置:
    xAxis: [
        {
            type: "category",   // 类型
            axisTick: {         // 坐标轴刻度相关设置
                show: false,    // 是否显示坐标轴刻度
                alignWithLabel: true
            },
            axisLine: {         // 轴线相关设置
                lineStyle: {
                  color: colors[2]
                }
            },
            axisLabel: {        // 轴线上的刻度文字设置
                fontSize: 8,
                formatter: function (value, index) { // x轴label文字格式化
                    return value.slice(5, value.length)
                }
            },
          data: []
        }
    ]
    
  • yAixs: 直角坐标系 grid 中的 y 轴, 也可以为数组和对象,原理同x轴。x轴和y轴的配置基本相同。当我们知道如何配置x轴时同时也就知道了如何配置y轴。
  yAxis: [
    {
      type: "value",    // y轴label文字类型
      name:"妥投票数",   // y轴需要显示的名称
      min: 500,         // 坐标轴最小值,当然也可以设置max最大值
      position: "left", // 坐标轴位置,因为可能有多个坐标(y)轴
      splitLine: {      // y轴分割线相关设置
        show: false,
        lineStyle: {
          type: "dashed",
          color: "#124977"
        }
      }
      ...               // 其他配置
    },
    {
        ...             // 第二根坐标轴的配置,配置项基本相同,可以自定义
    }
]

由于本文篇幅过长,于是分为系列文章。
后续我们在详细讲折线图、条形图以及其他类型的echarts图表。

更新:
手把手教你玩转echarts(二)-折线图

写在最后

本人文笔垃圾,不过希望大家能看的懂,有所收获。如果对你有帮助的话,记得不吝赐赞哟~
爱你们,么么哒♥

如有错误,欢迎指正呀~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值