ECharts用法及常用配置项详解(Vue环境)

举报
敬 之 发表于 2022/04/13 23:23:52 2022/04/13
【摘要】 目录 一、案例展示 二、ECharts 用法与常用属性介绍 1.在项目中引入 ECharts 2.绘制图表 3.常用配置项 三、案例完整代码 + 详细注释 一、案例展示         本例通过一个 echarts 图表的 demo 来熟悉...

目录

一、案例展示

二、ECharts 用法与常用属性介绍

1.在项目中引入 ECharts

2.绘制图表

3.常用配置项

三、案例完整代码 + 详细注释


一、案例展示

        本例通过一个 echarts 图表的 demo 来熟悉图表的各属性;

        此 demo 实现了图表数据的展示、缩放、全屏展示、拖拽以及自定义工具如图表切换等功能;效果如下:


二、ECharts 用法与常用属性介绍

1.在项目中引入 ECharts

(1)首先使用 npm下载安装 ECharts;

npm install echarts --save
 

(2)在项目的 main.js 文件中引入(此处为全局引入,后续在单个 .vue 页面中无需再引);


  
  1. //引入
  2. import echarts from 'echarts'
  3. import * as Echarts5 from 'echarts5' //echarts新版本echarts5
  4. //使用
  5. Vue.prototype.$echarts = echarts;
  6. Vue.prototype.$echarts5 = Echarts5; //新版本

2.绘制图表

(1)首先为 ECharts 准备一个定义了高宽的 DOM 容器;


  
  1. <template>
  2. <div>
  3. <!--图表的dom-->
  4. <div id="main" style="width: 600px;height:400px;"></div>
  5. </div>
  6. </template>

 (2)初始化 echarts 实例并显示图表

        在 vue 的 methods:{ } 中定义方法绘制图表,初始化 echarts 实例;


  
  1. <script>
  2. export default {
  3. data() {
  4. return {}
  5. },
  6. methods: {
  7. drawChart() {
  8. //初始化echarts实例
  9. var myChart = this.$echarts.init(document.getElementById('main'));
  10. //图表的配置项和数据
  11. var option = {};
  12. //使用刚指定的配置项和数据显示图表。
  13. myChart.setOption(option);
  14. }
  15. },
  16. mounted() {
  17. //调用方法
  18. this.drawChart();
  19. }
  20. }
  21. </script>

        注意在 vue 中初始化 echarts 实例与官网稍有不同,需要将 echarts.init 改为 this.$echarts.init ,定义后的方法也需要在 vue 挂载阶段 mounted(){ } 中进行调用。

3.常用配置项

title 标题组件,包含主标题和副标题。
legend 图例组件,可选 plain 普通图例、scroll 可滚动翻页的图例。
grid 直角坐标系内绘图网格,可以在网格上绘制折线图柱状图散点图(气泡图)
xAxis x轴。
yAxis y轴。
dataZoom

区域缩放,常用的为内置型数据区域缩放组件(dataZoomInside),内置于坐标系中,使用户可以在坐标系上通过鼠标拖拽、鼠标滚轮、手指滑动(触屏上)来缩放或漫游坐标系。

visualMap 视觉映射组件,常用于地图当中。
tooltip 提示框组件。
toolbox 工具栏,内置有导出图片数据视图动态类型切换数据区域缩放重置五个工具;除了内置工具之外,还可以自定义工具,写于 feature 内。
geo

地理坐标系组件,用于地图的绘制。

dataset 数据集组件,用于单独的数据集声明。

更多详情请参见 ECharts 官网的配置项手册:Documentation - Apache EChartsECharts, a powerful, interactive charting and visualization library for browserhttps://echarts.apache.org/zh/option.html#title


三、案例完整代码 + 详细注释


  
  1. <template>
  2. <div class="main">
  3. <div class="echarts">
  4. <!--为Echarts定义自定义宽高的容器-->
  5. <!--左侧柱图-->
  6. <div id="bar"></div>
  7. <!--右侧饼图和折线图-->
  8. <div class="echarts2">
  9. <!--饼图-->
  10. <div id="pie"></div>
  11. <!--折线图-->
  12. <div id="line"></div>
  13. </div>
  14. </div>
  15. </div>
  16. </template>
  17. <script>
  18. export default {
  19. data() {
  20. return {
  21. //此处是柱图中的数据,便于引用数据的举例;饼图和折线图数据我直接写在了option内
  22. array: [
  23. ['公司名', 'A公司', 'B公司', 'C公司'],
  24. ['周一', '90', '85', '50'],
  25. ['周二', '110', '85', '60'],
  26. ['周三', '150', '145', '60'],
  27. ['周四', '190', '100', '80'],
  28. ['周五', '90', '110', '110'],
  29. ['周六', '90', '130', '60'],
  30. ['周日', '60', '45', '80']
  31. ]
  32. }
  33. },
  34. name: "Echarts",
  35. methods: {
  36. //绘制柱状图
  37. drawChart_bar() {
  38. //初始化Echarts实例,注意在vue中要使用 this.$echarts.init
  39. let myEchart = this.$echarts.init(document.getElementById("bar"));
  40. //指定图表配置项和数据
  41. let option = {
  42. // 内置型缩放
  43. dataZoom: {
  44. type: 'inside'
  45. },
  46. //提示框
  47. tooltip: {
  48. trigger: 'item',
  49. },
  50. //工具栏
  51. toolbox: {
  52. padding: [7, 6],
  53. show: true,
  54. //自定义工具
  55. feature: {
  56. magicType: {
  57. type: ["line", "bar"]
  58. },
  59. //配置项还原
  60. restore: {},
  61. //保存为图片
  62. saveAsImage: {},
  63. //定义全屏展示,注意在不同的浏览器全屏展示写法也是不同的
  64. mytool1: {
  65. show: true,
  66. title: '全屏展示',
  67. icon: 'path://M432.45,595.444c0,2.177-4.661,6.82-11.305,6.82c-6.475,0-11.306-4.567-11.306-6.82s4.852-6.812,11.306-6.812C427.841,588.632,432.452,593.191,432.45,595.444L432.45,595.444z M421.155,589.876c-3.009,0-5.448,2.495-5.448,5.572s2.439,5.572,5.448,5.572c3.01,0,5.449-2.495,5.449-5.572C426.604,592.371,424.165,589.876,421.155,589.876L421.155,589.876z M421.146,591.891c-1.916,0-3.47,1.589-3.47,3.549c0,1.959,1.554,3.548,3.47,3.548s3.469-1.589,3.469-3.548C424.614,593.479,423.062,591.891,421.146,591.891L421.146,591.891zM421.146,591.891',
  68. onclick: () => {
  69. this.fullFlag = true;
  70. let element = document.getElementById('bar');
  71. // element.setOption(pacchartOption4);
  72. if (element.requestFullScreen) { //HTML W3C 提议
  73. element.requestFullScreen();
  74. } else if (element.msRequestFullscreen) { //IE11
  75. element.msRequestFullScreen();
  76. } else if (element.webkitRequestFullScreen) { //Webkit (works in Safari5.1 and Chrome 15)
  77. element.webkitRequestFullScreen();
  78. } else if (element.mozRequestFullScreen) { //Firefox (works in nightly)
  79. element.mozRequestFullScreen();
  80. }
  81. // 退出全屏
  82. if (element.requestFullScreen) {
  83. document.exitFullscreen();
  84. } else if (element.msRequestFullScreen) {
  85. document.msExitFullscreen();
  86. } else if (element.webkitRequestFullScreen) {
  87. document.webkitCancelFullScreen();
  88. } else if (element.mozRequestFullScreen) {
  89. document.mozCancelFullScreen();
  90. }
  91. }
  92. }
  93. },
  94. },
  95. //标题
  96. title: {
  97. text: "2021分公司年度资金流水",
  98. subtext: "11月份第四周",
  99. left: 'center',
  100. show: true,
  101. padding: [10, 5]
  102. },
  103. //数据集
  104. dataset: {
  105. source: this.array, //引用data中的数据
  106. },
  107. //图例
  108. legend: {
  109. orient: "horizontal",
  110. top: '96%',
  111. itemHeight: 9,
  112. },
  113. //X轴
  114. xAxis: {
  115. //类目轴
  116. type: 'category',
  117. //相对于默认位置的偏移
  118. offset: 6,
  119. name: '日期',
  120. nameLocation: "end",
  121. axisTick: {
  122. show: true
  123. }
  124. },
  125. //Y轴
  126. yAxis: {
  127. //数值轴
  128. type: 'value',
  129. name: '数量(万元)'
  130. },
  131. series: [
  132. {
  133. type: 'bar',
  134. //坐标轴显示器的文本标签
  135. label: {
  136. show: true,
  137. position: 'top',
  138. color: 'gray'
  139. },
  140. },
  141. {
  142. type: 'bar',
  143. label: {
  144. show: true,
  145. position: 'top',
  146. color: 'gray'
  147. },
  148. },
  149. {
  150. type: 'bar',
  151. label: {
  152. show: true,
  153. position: 'top',
  154. color: 'gray'
  155. },
  156. },
  157. ]
  158. };
  159. //显示图表
  160. myEchart.setOption(option);
  161. },
  162. //饼图
  163. drawChart_pie() {
  164. var myChart1 = this.$echarts.init(document.getElementById('pie'));
  165. var option = {
  166. title: {
  167. text: '五大城市中公司主要业务量情况',
  168. subtext: '2021年第一季度',
  169. left: 'center',
  170. padding: [10, 5]
  171. },
  172. //工具栏
  173. toolbox: {
  174. padding: [7, 11],
  175. show: true,
  176. feature: {
  177. saveAsImage: {},
  178. dataView: {}
  179. }
  180. },
  181. //提示框组件
  182. tooltip: {
  183. trigger: 'item',
  184. },
  185. legend: {
  186. orient: 'vertical',
  187. left: '10',
  188. top: '4'
  189. },
  190. series: [
  191. {
  192. name: '业务量:',
  193. type: 'pie',
  194. radius: '50%',
  195. data: [
  196. {value: 1048, name: '北京'},
  197. {value: 735, name: '上海'},
  198. {value: 580, name: '广州'},
  199. {value: 484, name: '深圳'},
  200. {value: 300, name: '成都'}
  201. ],
  202. emphasis: {
  203. itemStyle: {
  204. shadowBlur: 10,
  205. shadowOffsetX: 0,
  206. shadowColor: 'rgba(0, 0, 0, 0.5)'
  207. }
  208. },
  209. }
  210. ]
  211. };
  212. myChart1.setOption(option);
  213. },
  214. //折线图
  215. drawChart_line() {
  216. var myChart2 = this.$echarts.init(document.getElementById('line'));
  217. var option = {
  218. title: {
  219. text: '股市走向',
  220. left: '10',
  221. top: '5'
  222. },
  223. //滑动条型缩放显示
  224. // dataZoom: {
  225. // type: 'slider'
  226. // },
  227. toolbox: {
  228. show: true,
  229. padding: [7, 11],
  230. feature: {
  231. saveAsImage: {},
  232. dataView: {}
  233. }
  234. },
  235. tooltip: {
  236. trigger: 'axis'
  237. },
  238. legend: {
  239. data: ['A股', 'B股', 'C股', 'D股'],
  240. top: '10'
  241. },
  242. grid: {
  243. left: '3%',
  244. right: '4%',
  245. bottom: '3%',
  246. containLabel: true
  247. },
  248. xAxis: {
  249. type: 'category',
  250. boundaryGap: false,
  251. data: ['2011', '2012', '2013', '2014', '2015', '2016', '2017'],
  252. axisLabel: {
  253. rotate: 45,
  254. margin: 11,
  255. formatter: function (value, index) {
  256. return value + '年'
  257. }
  258. }
  259. },
  260. yAxis: {
  261. type: 'value',
  262. axisLabel: {
  263. formatter: function (value, index) {
  264. if (value >= 1000) {
  265. return value = value / 1000 + 'k';
  266. } else {
  267. return value;
  268. }
  269. }
  270. }
  271. },
  272. series: [
  273. {
  274. name: 'A股',
  275. type: 'line',
  276. //数据堆叠
  277. stack: 'Total',
  278. data: [220, 182, 191, 234, 290, 330, 310],
  279. },
  280. {
  281. name: 'B股',
  282. type: 'line',
  283. stack: 'Total',
  284. data: [150, 232, 201, 154, 190, 330, 410]
  285. },
  286. {
  287. name: 'C股',
  288. type: 'line',
  289. stack: 'Total',
  290. data: [320, 332, 301, 334, 390, 330, 320]
  291. },
  292. {
  293. name: 'D股',
  294. type: 'line',
  295. stack: 'Total',
  296. data: [820, 932, 901, 934, 1290, 1330, 1320]
  297. }
  298. ]
  299. };
  300. myChart2.setOption(option);
  301. },
  302. //实现拖拽
  303. drag() {
  304. var box = document.querySelector('#bar');
  305. var starX = null;
  306. var starY = null;
  307. var left = null;
  308. var top1 = null;
  309. box.onmousedown = function (ev) {//给要移动的那个div加鼠标按下事件
  310. ev = ev || window.event;//event做ie兼容
  311. starX = ev.pageX;
  312. starY = ev.pageY;
  313. left = box.offsetLeft;//到父级的左侧距离
  314. top1 = box.offsetTop;//到父级的顶部距离
  315. document.onmousemove = function (ev) {//给整个文档加移动事件
  316. ev = ev || window.event;
  317. var dia = ev.pageX - starX;//鼠标现在的距离减去之前的距离 得到一个差值
  318. var dib = ev.pageY - starY;
  319. box.style.top = top1 + dib + 'px';//重新给box的顶部和left赋值
  320. box.style.left = left + dia + 'px';
  321. };
  322. document.onmouseup = function () {
  323. document.onmousemove = null;//解除绑定移动事件
  324. document.onmouseup = null;//解除绑定抬起事件
  325. };
  326. console.log(starX, starY)
  327. }
  328. }
  329. },
  330. mounted() {
  331. //调用方法
  332. //画图
  333. this.drawChart_bar();
  334. this.drawChart_pie();
  335. this.drawChart_line();
  336. //拖拽
  337. this.drag();
  338. }
  339. }
  340. </script>
  341. <style scoped>
  342. .main {
  343. position: relative;
  344. margin-top: -0.3rem;
  345. }
  346. .echarts {
  347. display: flex;
  348. justify-content: space-between;
  349. }
  350. #bar {
  351. width: 50%;
  352. height: 8rem;
  353. background-color: #FFFFFF;
  354. margin-top: 0.1rem;
  355. position: absolute;
  356. z-index: 1;
  357. }
  358. .echarts2 {
  359. width: 49.5%;
  360. height: 8rem;
  361. margin-left: 50.5%;
  362. margin-top: 0.1rem;
  363. }
  364. .echarts2 #pie {
  365. width: 49.5%;
  366. height: 3.95rem;
  367. background-color: #FFFFFF;
  368. margin-bottom: 0.1rem;
  369. position: absolute;
  370. }
  371. .echarts2 #line {
  372. width: 49.5%;
  373. height: 3.95rem;
  374. background-color: #FFFFFF;
  375. position: absolute;
  376. margin-top: 4.05rem;
  377. }
  378. </style>

文章来源: majinjian.blog.csdn.net,作者:Developer 小马,版权归原作者所有,如需转载,请联系作者。

原文链接:majinjian.blog.csdn.net/article/details/121921783

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。