• 实现 ECharts 图表自适应


    目录

    使用思路:

    Echarts在vue中使用

    引入 ECharts

    绘制图表实例(复杂)

    实例效果:

    官方入门实例(简单)

    官方入门实例效果 

    更新echarts图表数据

    图表自适应

    x轴设为时间轴

    不同时间数据重叠显示 

    tooltip圆点颜色修改


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

    使用思路:

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

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

    Echarts在vue中使用

    首先在项目中安装Echarts

    npm install echarts --save

    引入 ECharts

    全局引入

    • main.js
    1. // 引入echarts
    2. import echarts from 'echarts'
    3. Vue.prototype.$echarts = echarts

    所需组件单个引入

    import * as echarts from "echarts";

    绘制图表实例(复杂)

    1. <template>
    2. <div class="conentTop">
    3. <div id="pieChart" :style="{ width: '49%', height: '100%' }">div>
    4. <div id="barChart" :style="{ width: '49%', height: '100%' }">div>
    5. div>
    6. template>
    7. <script>
    8. import * as echarts from "echarts";
    9. export default {
    10. name: 'topEcharts',
    11. data() {
    12. return {
    13. }
    14. },
    15. mounted() { // 挂载后获取Dom渲染图表
    16. this.drawLine();
    17. this.drawLineTow();
    18. },
    19. methods: {
    20. // 饼图
    21. drawLine() {
    22. // 基于准备好的dom,初始化echarts实例
    23. let pieChart = echarts.init(document.getElementById('pieChart'))
    24. // 绘制饼状图表
    25. pieChart.setOption({
    26. title: {
    27. text: '问题类型',
    28. left: 'left'
    29. },
    30. series: [
    31. {
    32. type: 'pie',
    33. showEmptyCircle: false,//是否显示占位圆
    34. data: [
    35. {
    36. value: 8,
    37. name: '延误较大',
    38. },
    39. {
    40. value: 14,
    41. name: '失衡'
    42. },
    43. {
    44. value: 16,
    45. name: '校时异常'
    46. },
    47. {
    48. value: 20,
    49. name: '空放'
    50. },
    51. {
    52. value: 24,
    53. name: '拥堵',
    54. },
    55. ],
    56. radius: ['18%', '70%'],
    57. roseType: 'area',
    58. label: { //饼图上显示数值
    59. show: true,//数据为空时仍开启显示
    60. // position: 'top',//在上方显示
    61. textStyle: {//数值公共样式
    62. lineHeight: 24,
    63. },
    64. //数据名b 数据值c 百分比d {name}{time}表示为数值设置的类名 \n、\t为字符串转义符
    65. formatter: "{name|{b}}\n {time|{c}\t({d}%)}",
    66. rich: {//单独设置类样式
    67. name: {
    68. fontSize: 14,
    69. fontWeight: 'bold',
    70. color: '#000000',
    71. },
    72. time: {
    73. fontSize: 12,
    74. color: '#2F4683',
    75. fontWeight: 'bold',
    76. }
    77. },
    78. }
    79. },
    80. // 背景圆设置
    81. {
    82. type: 'pie',
    83. radius: [20, 126],
    84. emptyCircleStyle: {
    85. color: '#EDE8FE'
    86. }
    87. }
    88. ]
    89. });
    90. window.addEventListener("resize", () => {
    91. pieChart.resize();
    92. });
    93. },
    94. // 柱形图
    95. drawLineTow() {
    96. // 基于准备好的dom,初始化echarts实例
    97. let barChart = echarts.init(document.getElementById('barChart'));
    98. // 绘制图表
    99. barChart.setOption({
    100. title: {
    101. text: '问题趋势',
    102. left: 'left',
    103. top: 'top',
    104. },
    105. tooltip: {},//悬浮提示
    106. color: [
    107. {
    108. type: 'linear',
    109. x: 0,
    110. y: 0,
    111. x2: 0,
    112. y2: 1,
    113. colorStops: [
    114. { offset: 0, color: '#FCDB00FF' }, // 设置颜色渐变
    115. { offset: 1, color: '#F7B500FF' }
    116. ]
    117. },
    118. ],
    119. xAxis: {
    120. // type:'time',
    121. // name:'x轴标题',
    122. axisTick: {
    123. show: false, //隐藏x轴刻度轴线
    124. },
    125. axisLine: {
    126. lineStyle: {
    127. color: "#638DFF7A"//x轴轴线颜色
    128. }
    129. },
    130. data: ["2022-12-01", "2022-12-02", "2022-12-03", "2022-12-04", "2022-12-05", "2022-12-06", "2022-12-07"],
    131. },
    132. yAxis: {
    133. type: 'value',
    134. axisLine: {//y轴样式
    135. show: true,//显示y轴线条
    136. lineStyle: {
    137. color: "#638DFF7A"//y轴轴线颜色
    138. }
    139. },
    140. splitLine: { //y轴分割线样式
    141. // show: true, // 默认值
    142. lineStyle: {
    143. type: "dashed", //虚线
    144. color: "#638DFF7A"
    145. }
    146. },
    147. },
    148. series: [
    149. {
    150. type: 'bar',
    151. barWidth: 30,
    152. data: [41, 58, 68, 100, 31, 39, 29],
    153. }
    154. ],
    155. });
    156. // 图表自适应
    157. window.addEventListener("resize", () => {
    158. barChart.resize();
    159. });
    160. },
    161. }
    162. }
    163. script>
    164. <style scoped>
    165. .conentTop {
    166. width: 100%;
    167. height: 409px;
    168. box-sizing: border-box;
    169. display: flex;
    170. justify-content: space-around;
    171. align-items: center;
    172. padding: 20px 0 16px 0;
    173. }
    174. #pieChart,
    175. #barChart {
    176. box-sizing: border-box;
    177. padding-left: 23px;
    178. padding-top: 13px;
    179. background-color: #fff;
    180. }
    181. style>

    实例效果:

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

    官方入门实例(简单)

    1. <script>
    2. import * as echarts from "echarts";
    3. export default {
    4. name: 'hello',
    5. data() {
    6. return {
    7. msg: 'Welcome to Your Vue.js App'
    8. }
    9. },
    10. mounted() {
    11. this.drawLine();
    12. },
    13. methods: {
    14. drawLine() {
    15. // 基于准备好的dom,初始化echarts实例
    16. let myChart = echarts.init(document.getElementById('myChart'))
    17. // 绘制图表
    18. myChart.setOption({
    19. title: {
    20. text: 'ECharts 入门示例'
    21. },
    22. tooltip: {},
    23. xAxis: {
    24. data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
    25. },
    26. yAxis: {},
    27. series: [
    28. {
    29. name: '销量',
    30. type: 'bar',
    31. data: [5, 20, 36, 10, 10, 20]
    32. }
    33. ]
    34. });
    35. }
    36. }
    37. }
    38. script>

    官方入门实例效果 

    更新echarts图表数据

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

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

    •  不顾及页面效果,避免控制台警告可先销毁图表实例再初始化图表
    1. 官方方法 // 图表实例变量名:pieChart
    2. pieChart.dispose(); // 销毁
    3. pieChart.clear(); // 清空
    4. 使用举例
    5. // data中 chartsDom = null,
    6. // 初始化图表前先判断 若存在先销毁
    7. if(this.chartsDom != null &&
    8. this.chartsDom != '' &&
    9. this.chartsDom != undefined){
    10. this.chartsDom.dispose();
    11. }
    12. // 然后正常初始化流程
    13. let chartsDom = document.getElementById('curveChart');
    14. this.chartsDom = echarts.init(chartsDom);
    15. this.chartsDom.setOption(option);

    图表自适应

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

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

    官方方法

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

    x轴设为时间轴

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

    转换为如下两种格式均可

    1. const data = [
    2. ['时间格式' , 值],
    3. ['2019-11-1 09:00:20' , 55],
    4. ]
    5. const data = [
    6. ['时间戳格式' , 值],
    7. ['1682179200000' , 55],
    8. ]

    setOption相关配置如下

    • 极简版本
    1. option = {
    2. xAxis: {
    3. type: 'time',
    4. },
    5. yAxis: {
    6. type: 'value'
    7. },
    8. series: [
    9. {
    10. data: [ ["2021-01-04 08:14:36", 60],["2021-01-04 20:14:46", 56] ],
    11. // data: [[1651372200,20],[1651373400,40],[1651377000,35]],
    12. type: 'line',
    13. }
    14. ]
    15. };
    • 添加最大值最小值与坐标时间段刻度分割整数版本
    1. option = {
    2. tooltip:{
    3. trigger:'axis',
    4. },
    5. xAxis: {
    6. type: 'time',
    7. interval: 3600 * 1 * 1000 * 6, // 坐标轴分割刻度显示成整数
    8. min: function (value) { // 最小值限制
    9. let year = new Date(value.max).getFullYear();
    10. let month = new Date(value.max).getMonth() + 1;
    11. let day = new Date(value.max).getDate();
    12. return new Date(
    13. year + "-" + month + "-" + day + " 00:00:00"
    14. ).getTime();
    15. },
    16. max: function (value) { // 最大值限制
    17. let year = new Date(value.max).getFullYear();
    18. let month = new Date(value.max).getMonth() + 1;
    19. let day = new Date(value.max).getDate();
    20. return new Date(
    21. year + "-" + month + "-" + day + " 23:59:00"
    22. ).getTime();
    23. },
    24. axisLabel: { // 坐标轴刻度标签的相关设置
    25. // formatter: '{HH}:{mm}', // 只显示时间
    26. formatter:function(e){ // 调用方法返回显示年月日时间段
    27. return timestampToTime(e);
    28. },
    29. rotate:30, // 倾斜角度
    30. showMinLabel: true,
    31. showMaxLabel: true,
    32. },
    33. },
    34. yAxis: {
    35. type: 'value'
    36. },
    37. series: [
    38. {
    39. data: [ ["2023-04-04 08:14:36", 60],["2023-04-04 10:16:46", 56],["2023-04-04 15:16:46", 56] ],
    40. // data: [[1651372200,20],[1651373400,40],[1651377000,35]],
    41. type: 'line',
    42. }
    43. ]
    44. };
    45. function timestampToTime(timestamp) {
    46. // var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000rotate:30
    47. var date = new Date(timestamp);
    48. var Y = date.getFullYear() + '-';
    49. var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
    50. var D = (date.getDate() < 10 ? '0'+ date.getDate() : date.getDate()) + ' ';
    51. var h = (date.getHours() < 10 ? '0'+ date.getHours() : date.getHours()) + ':';
    52. var m = (date.getMinutes() < 10 ? '0'+ date.getMinutes() : date.getMinutes()) + ':';
    53. var s = (date.getSeconds() < 10 ? '0'+ date.getSeconds() : date.getSeconds());
    54. return Y+M+D+h+m+s;
    55. }
    • 效果展示: 

    不同时间数据重叠显示 

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

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

    tooltip圆点颜色修改

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

    模板修改,但较为麻烦。 

  • 相关阅读:
    43特征01——特征值和特征向量基本性质
    k8s 资源管理
    第五次线上面试总结(2022.9.21 二面)
    泰山OFFICE技术讲座:上标研究2:上标的大小
    CF1765M Minimum LCM
    pnpm install报错 Value of “this“ must be of type URLSearchParams
    ROS2进阶:在windows10上用vs2019编译rviz2
    Spring Cloud Consul 入门指引
    DAMA-DMBOK2重点知识整理CDGA/CDGP——第17章 数据管理和组织变革管理
    Easyrecovery靠谱不收费的数据恢复电脑软件
  • 原文地址:https://blog.csdn.net/TKY666/article/details/126610872