ECharts在vue中使用、图表自适应、时间轴

目录

使用思路:

Echarts在vue中使用

引入 ECharts

绘制图表实例(复杂)

实例效果:

官方入门实例(简单)

官方入门实例效果 

更新echarts图表数据

图表自适应

x轴设为时间轴

不同时间数据重叠显示 

tooltip圆点颜色修改


ECharts 的功能十分强大,可以生成多种形式的图表,配置项十分灵活,可以根据实际需求自由定制
官方文档: https://www.echartsjs.com/examples/

使用思路:

官方示例查看相近图例 + 后续问题 + 浏览器搜索 + 官方配置项手册对应字段查找 = 结果

当我们绘制图表时总是会需要自己配置一些样式效果,而官方API又难以查找,新手可以将想要查找的效果样式在浏览器中搜索,根据搜索结果的提示去设置或再去官方配置项手册搜索查找对应项配置。

Echarts在vue中使用

首先在项目中安装Echarts

npm install echarts --save

引入 ECharts

全局引入

  • main.js
// 引入echarts
import echarts from 'echarts'

Vue.prototype.$echarts = echarts 

所需组件单个引入

import * as echarts from "echarts";

绘制图表实例(复杂)

<template>
	<div class="conentTop">
		<div id="pieChart" :style="{ width: '49%', height: '100%' }"></div> 
		<div id="barChart" :style="{ width: '49%', height: '100%' }"></div>
	</div>
</template>
<script>
import * as echarts from "echarts";
export default {
	name: 'topEcharts',
	data() {
		return {

		}
	},
	mounted() { // 挂载后获取Dom渲染图表
		this.drawLine();
		this.drawLineTow();
	},
	methods: {
		// 饼图
		drawLine() {
			// 基于准备好的dom,初始化echarts实例
			let pieChart = echarts.init(document.getElementById('pieChart'))
			// 绘制饼状图表
			pieChart.setOption({
				title: {
					text: '问题类型',
					left: 'left'
				},
				series: [
					{
						type: 'pie',
						showEmptyCircle: false,//是否显示占位圆
						data: [
							{
								value: 8,
								name: '延误较大',
							},
							{
								value: 14,
								name: '失衡'
							},
							{
								value: 16,
								name: '校时异常'
							},
							{
								value: 20,
								name: '空放'
							},
							{
								value: 24,
								name: '拥堵',
							},
						],
						radius: ['18%', '70%'],
						roseType: 'area',
						label: { //饼图上显示数值
							show: true,//数据为空时仍开启显示
							// position: 'top',//在上方显示
							textStyle: {//数值公共样式
								lineHeight: 24,
							},
							//数据名b 数据值c 百分比d {name}{time}表示为数值设置的类名 \n、\t为字符串转义符
							formatter: "{name|{b}}\n {time|{c}\t({d}%)}",
							rich: {//单独设置类样式
								name: {
									fontSize: 14,
									fontWeight: 'bold',
									color: '#000000',

								},
								time: {
									fontSize: 12,
									color: '#2F4683',
									fontWeight: 'bold',
								}
							},
						}
					},
					// 背景圆设置
					{
						type: 'pie',
						radius: [20, 126],
						emptyCircleStyle: {
							color: '#EDE8FE'
						}
					}
				]
			});
			window.addEventListener("resize", () => {
				pieChart.resize();
			});
		},
		// 柱形图
		drawLineTow() {
			// 基于准备好的dom,初始化echarts实例
			let barChart = echarts.init(document.getElementById('barChart'));
			// 绘制图表
			barChart.setOption({
				title: {
					text: '问题趋势',
					left: 'left',
					top: 'top',
				},
				tooltip: {},//悬浮提示
				color: [
					{
						type: 'linear',
						x: 0,
						y: 0,
						x2: 0,
						y2: 1,
						colorStops: [
							{ offset: 0, color: '#FCDB00FF' }, // 设置颜色渐变
							{ offset: 1, color: '#F7B500FF' }
						]
					},
				],
				xAxis: {
					// type:'time',
					// name:'x轴标题',
					axisTick: {
						show: false, //隐藏x轴刻度轴线
					},
					axisLine: {
						lineStyle: {
							color: "#638DFF7A"//x轴轴线颜色
						}
					},
					data: ["2022-12-01", "2022-12-02", "2022-12-03", "2022-12-04", "2022-12-05", "2022-12-06", "2022-12-07"],
				},
				yAxis: {
					type: 'value',
					axisLine: {//y轴样式
						show: true,//显示y轴线条
						lineStyle: {
							color: "#638DFF7A"//y轴轴线颜色
						}
					},
					splitLine: { //y轴分割线样式
						// show: true, // 默认值
						lineStyle: {
							type: "dashed", //虚线
							color: "#638DFF7A"
						}
					},
				},
				series: [
					{
						type: 'bar',
						barWidth: 30,
						data: [41, 58, 68, 100, 31, 39, 29],
					}
				],
			});
			// 图表自适应
			window.addEventListener("resize", () => {
				barChart.resize();
			});
		},
	}
}
</script>
<style scoped>
.conentTop {
	width: 100%;
	height: 409px;
	box-sizing: border-box;
	display: flex;
	justify-content: space-around;
	align-items: center;
	padding: 20px 0 16px 0;
}

#pieChart,
#barChart {
	box-sizing: border-box;
	padding-left: 23px;
	padding-top: 13px;
	background-color: #fff;
}
</style>

实例效果:

 若感觉上方实例太复杂可看下官方入门实例

官方入门实例(简单)

<template>
	<div>
		<div id="myChart" :style="{ width: '600px', height: '300px' }"></div>
	</div>
</template>
<script>
import * as echarts from "echarts";
export default {
	name: 'hello',
	data() {
		return {
			msg: 'Welcome to Your Vue.js App'
		}
	},
	mounted() {
		this.drawLine();
	},
	methods: {
		drawLine() {
			// 基于准备好的dom,初始化echarts实例
			let myChart = echarts.init(document.getElementById('myChart'))
			// 绘制图表
			myChart.setOption({
				title: {
					text: 'ECharts 入门示例'
				},
				tooltip: {},
				xAxis: {
					data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
				},
				yAxis: {},
				series: [
					{
						name: '销量',
						type: 'bar',
						data: [5, 20, 36, 10, 10, 20]
					}
				]
			});
		}
	}
}
</script>

官方入门实例效果 

更新echarts图表数据

需要修改图表数据时,将series中的data数据直接修改,然后重新初始化数据echarts图表即可。

  • 想要页面效果好就直接初始化图表,但控制台会有警告(重复初始化一个DOM)

  •  不顾及页面效果,避免控制台警告可先销毁图表实例再初始化图表
官方方法 // 图表实例变量名:pieChart
pieChart.dispose(); // 销毁
pieChart.clear(); // 清空

使用举例
// data中 chartsDom = null,
// 初始化图表前先判断 若存在先销毁
if(this.chartsDom != null &&
        this.chartsDom != '' &&
        this.chartsDom != undefined){
          this.chartsDom.dispose();
        }
      // 然后正常初始化流程
      let chartsDom =  document.getElementById('curveChart');
      this.chartsDom = echarts.init(chartsDom);
      this.chartsDom.setOption(option);

图表自适应

实现图表自适应可使用一些百分比、rem、em、vh、vw等相对单位设置图表宽高。

并且结合官方resize方法即可。

官方方法

window.addEventListener("resize", () => {
				pieChart.resize(); // 图表实例变量名:pieChart
			});

x轴设为时间轴

注意:使用echarts时间轴设置首先要注意series.data的数据格式就需要转换下了,不能再是单一值类型。

转换为如下两种格式均可

const data = [
    ['时间格式' , 值],
    ['2019-11-1 09:00:20' , 55],
]
const data = [
    ['时间戳格式' , 值],
    ['1682179200000' , 55],
]

setOption相关配置如下

  • 极简版本
option = {
  xAxis: {
    type: 'time',
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      data: [ ["2021-01-04 08:14:36", 60],["2021-01-04 20:14:46", 56] ],
      // data: [[1651372200,20],[1651373400,40],[1651377000,35]],
      type: 'line',
    }
  ]
};
  • 添加最大值最小值与坐标时间段刻度分割整数版本
option = {
  tooltip:{
    trigger:'axis',
  },
  xAxis: {
    type: 'time',
            interval: 3600 * 1 * 1000 * 6, // 坐标轴分割刻度显示成整数
            min: function (value) { // 最小值限制
              let year = new Date(value.max).getFullYear();
              let month = new Date(value.max).getMonth() + 1;
              let day = new Date(value.max).getDate();
              return new Date(
                year + "-" + month + "-" + day + " 00:00:00"
              ).getTime();
            },
            max: function (value) { // 最大值限制
              let year = new Date(value.max).getFullYear();
              let month = new Date(value.max).getMonth() + 1;
              let day = new Date(value.max).getDate();
              return new Date(
                year + "-" + month + "-" + day + " 23:59:00"
              ).getTime();
            },
            axisLabel: { // 坐标轴刻度标签的相关设置
              // formatter: '{HH}:{mm}', // 只显示时间
              formatter:function(e){ // 调用方法返回显示年月日时间段
                return timestampToTime(e);
              },
              rotate:30, // 倾斜角度
              showMinLabel: true,
              showMaxLabel: true,
            },
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      data: [ ["2023-04-04 08:14:36", 60],["2023-04-04 10:16:46", 56],["2023-04-04 15:16:46", 56] ],
      // data: [[1651372200,20],[1651373400,40],[1651377000,35]],
      type: 'line',
    }
  ]
};
function timestampToTime(timestamp) {
        // var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000rotate:30
       var date = new Date(timestamp);
        var Y = date.getFullYear() + '-';
        var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
        var D = (date.getDate() < 10 ? '0'+ date.getDate() : date.getDate()) + ' ';
        var h = (date.getHours() < 10 ? '0'+ date.getHours() : date.getHours()) + ':';
        var m = (date.getMinutes() < 10 ? '0'+ date.getMinutes() : date.getMinutes()) + ':';
        var s = (date.getSeconds() < 10 ? '0'+ date.getSeconds() : date.getSeconds());
        return Y+M+D+h+m+s;
    }
  • 效果展示: 

不同时间数据重叠显示 

注意:若是做两时间数据对比需要使用在series下的第二个数据里添加此配置 xAxisIndex: 1,

作用是让两时间数据重叠显示。

tooltip圆点颜色修改

修改图例与tooltip圆点颜色,可在series对应数据下添加itemStyle修改样式。或者使用formatter

模板修改,但较为麻烦。 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值