• ECharts的基本使用


    目录

    一、使用前提

    1、安装

    2、创建文件

    二、LineView.vue文件【相当于一个组件】

    1、导入

    2、methods方法下写init(){}方法进行选择

    3、methods方法下写setOptioin(option)

    4、init()函数调用

    5、整合完整代码

    三、IndexView.vue文件【实现组件引入显示】

    1、引入

    2、注册

    3、显示

    四、数据操作

    1、series系列

    2、title标题

    3、legend图例

    4、tooltip提示框

    五、地图

    1、前期准备

    2、设置配置项

    3、点击事件

    六、动态数据渲染

    1、问题提出

    2、解决方案


    整篇文章将通过实例讲述ECharts的基本使用

    官网:快速上手 - Handbook - Apache ECharts


    一、使用前提

    1、安装

    npm install echarts --save

    2、创建文件

    (1)在views文件夹下=》创建echarts=》创建LineView.vue文件

    (2)在views文件夹下=》创建IndexView.vue【用于所有图片的展示】


    二、LineView.vue文件【相当于一个组件】

    1、导入

    1. //5.0以上版本
    2. import * as echarts from 'echarts'
    3. //5.0以下
    4. import echarts from 'echarts'

    2、methods方法下写init(){}方法进行选择

    (1)获取dom元素

    const dom = document.getElementById('')

    (2)初始化表

    this.chart = echarts.init(dom)

    (3)配置项单独封装出去

    this.setOptions()

    3、methods方法下写setOptioin(option)

    (1)option的定义

    1. const option = {
    2. xAxis: {
    3. type: "category",
    4. data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
    5. },
    6. yAxis: {
    7. type: "value",
    8. },
    9. series: [
    10. {
    11. data: [150, 230, 224, 218, 135, 147, 260],
    12. type: "line",
    13. },
    14. ],
    15. };

    (2)option的作用

    1. //作用:保证两样都有执行
    2. option && this.chart.setOption(option)

    4、init()函数调用

    属于dom渲染,根据生命周期,要在mounted()调用

    1. mounted() {
    2. this.init()
    3. },

    5、整合完整代码

    1. <script>
    2. import * as echarts from "echarts";
    3. export default {
    4. name: "LineView",
    5. data() {
    6. return {};
    7. },
    8. mounted() {
    9. this.init();
    10. },
    11. methods: {
    12. init() {
    13. // 获取dom元素
    14. var dom = document.getElementById("line");
    15. // 初始化表
    16. this.chart = echarts.init(dom);
    17. // 设置配置项
    18. this.setOptions();
    19. },
    20. setOptions() {
    21. const option = {
    22. xAxis: {
    23. type: "category",
    24. data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
    25. },
    26. yAxis: {
    27. type: "value",
    28. },
    29. series: [
    30. {
    31. data: [150, 230, 224, 218, 135, 147, 260],
    32. type: "line",
    33. },
    34. ],
    35. };
    36. option && this.chart.setOption(option);
    37. },
    38. },
    39. };
    40. script>
    41. <style lang="scss" scoped>
    42. #line {
    43. width: 500px;
    44. height: 500px;
    45. }
    46. style>

    三、IndexView.vue文件【实现组件引入显示】

    1、引入

    import lineView from './echarts/lineView.vue';

    2、注册

    1. components:{
    2. lineView
    3. },

    3、显示

    1. <div class="index">
    2. <div class="line">
    3. <lineView>lineView>
    4. div>
    5. div>
    1. .index {
    2. width: 100%;
    3. height: 100%;
    4. .line {
    5. width: 500px;
    6. height: 500px;
    7. }
    8. }


    四、数据操作

    1、series系列

    (1)折线图、柱状图

    1. series: [
    2. {
    3. data: [150, 230, 224, 218, 135, 147, 260],//数据
    4. type: "line",//折线图
    5. smooth: true,//平滑
    6. },
    7. {
    8. data: [50, 30, 24, 18, 35, 147, 260],
    9. type: "line",//折线图
    10. },
    11. {
    12. data: [150, 230, 224, 218, 135, 147, 260],
    13. type: "bar",//柱状图
    14. },
    15. ],

    (2)饼图

    IndexView.vue

    1. <script>
    2. import lineView from "./echarts/lineView.vue";
    3. import pieView from "./echarts/PieView.vue";
    4. export default {
    5. name: "IndexView",
    6. components: {
    7. lineView,
    8. pieView,
    9. },
    10. data() {
    11. return {};
    12. },
    13. mounted() {},
    14. methods: {},
    15. };
    16. script>
    17. <style lang="scss" scoped>
    18. .index {
    19. width: 100%;
    20. height: 100%;
    21. display: flex;
    22. .line {
    23. width: 500px;
    24. height: 500px;
    25. }
    26. .pie {
    27. width: 500px;
    28. height: 500px;
    29. }
    30. }
    31. style>

    PieView.vue

    1. <script>
    2. import * as echarts from "echarts";
    3. export default {
    4. name: "PieView",
    5. data() {
    6. return {};
    7. },
    8. mounted() {
    9. this.init();
    10. },
    11. methods: {
    12. init() {
    13. // 获取dom元素
    14. var dom = document.getElementById("PiePage");
    15. // 初始化表
    16. this.chart = echarts.init(dom);
    17. // 设置配置项
    18. this.setOptions();
    19. },
    20. setOptions() {
    21. const option = {
    22. title: {
    23. text: "饼状图",
    24. subtext: "Fake Data",
    25. left: "center",
    26. },
    27. tooltip: {
    28. trigger: "item",
    29. },
    30. legend: {
    31. orient: "vertical",
    32. left: "left",
    33. },
    34. series: [
    35. {
    36. name: "Access From",
    37. type: "pie",
    38. radius: '50%', //饼状大小
    39. data: [
    40. //数据
    41. { value: 1048, name: "Search Engine" },
    42. { value: 735, name: "Direct" },
    43. { value: 580, name: "Email" },
    44. { value: 484, name: "Union Ads" },
    45. { value: 300, name: "Video Ads" },
    46. ],
    47. emphasis: {
    48. //高亮状态
    49. itemStyle: {
    50. //样式
    51. shadowBlur: 10,
    52. shadowOffsetX: 0,
    53. shadowColor: "rgba(0, 0, 0, 0.5)",
    54. },
    55. },
    56. },
    57. ],
    58. };
    59. option && this.chart.setOption(option);
    60. },
    61. },
    62. };
    63. script>
    64. <style lang="scss" scoped>
    65. #PiePage {
    66. width: 500px;
    67. height: 500px;
    68. }
    69. style>

    ①通过radius指定外半径、内半径

    1. series: [
    2. {
    3. name: "Access From",
    4. type: "pie",
    5. radius: ['20%','50%'],//[内半径, 外半径]
    6. data: [
    7. { value: 1048, name: "Search Engine" },
    8. { value: 735, name: "Direct" },
    9. { value: 580, name: "Email" },
    10. { value: 484, name: "Union Ads" },
    11. { value: 300, name: "Video Ads" },
    12. ],
    13. emphasis: {
    14. itemStyle: {
    15. shadowBlur: 10,
    16. shadowOffsetX: 0,
    17. shadowColor: "rgba(0, 0, 0, 0.5)",
    18. },
    19. },
    20. },
    21. ],

    ②文本标签

    1. const option = {
    2. title: {
    3. text: "饼状图",
    4. subtext: "Fake Data",
    5. left: "center",
    6. },
    7. tooltip: {
    8. trigger: "item",
    9. },
    10. legend: {
    11. orient: "vertical",
    12. left: "left",
    13. },
    14. series: [
    15. {
    16. name: "Access From",
    17. type: "pie",
    18. radius: ["20%", "50%"], //[内半径, 外半径]
    19. data: [
    20. //数据
    21. { value: 1048, name: "Search Engine" },
    22. { value: 735, name: "Direct" },
    23. { value: 580, name: "Email" },
    24. { value: 484, name: "Union Ads" },
    25. { value: 300, name: "Video Ads" },
    26. ],
    27. label:{
    28. show:true,
    29. position:'center'
    30. },
    31. emphasis: {
    32. //高亮状态
    33. itemStyle: {
    34. //样式
    35. shadowBlur: 10,
    36. shadowOffsetX: 0,
    37. shadowColor: "rgba(0, 0, 0, 0.5)",
    38. },
    39. },
    40. },
    41. ],
    42. };

    ③emphasis高亮状态

    1. const option = {
    2. title: {
    3. text: "饼状图",
    4. subtext: "Fake Data",
    5. left: "center",
    6. },
    7. tooltip: {
    8. trigger: "item",
    9. },
    10. legend: {
    11. orient: "vertical",
    12. left: "left",
    13. },
    14. series: [
    15. {
    16. name: "Access From",
    17. type: "pie",
    18. radius: ["20%", "50%"], //[内半径, 外半径]
    19. data: [
    20. //数据
    21. { value: 1048, name: "Search Engine" },
    22. { value: 735, name: "Direct" },
    23. { value: 580, name: "Email" },
    24. { value: 484, name: "Union Ads" },
    25. { value: 300, name: "Video Ads" },
    26. ],
    27. label:{
    28. show:false,
    29. position:'center'
    30. },
    31. //高亮状态
    32. emphasis: {
    33. //文字样式
    34. label:{
    35. show:true,
    36. fontSize:20,
    37. fontWeight:'bold'
    38. },
    39. //样式
    40. itemStyle: {
    41. shadowBlur: 10,
    42. shadowOffsetX: 0,
    43. shadowColor: "rgba(0, 0, 0, 0.5)",
    44. },
    45. },
    46. },
    47. ],
    48. };

    2、title标题

    1. const option = {
    2. title:{
    3. text:'统计图',
    4. link:'https://www.baidu.com/',//跳转路径
    5. target:'blank',//在新页面打开
    6. textStyle:{
    7. color:"blue",
    8. fontSize:'26',
    9. fontWeight:"bold",
    10. },
    11. left:'center',
    12. },
    13. xAxis: {
    14. type: "category",
    15. data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
    16. },
    17. yAxis: {
    18. type: "value",
    19. },
    20. series: [
    21. {
    22. data: [150, 230, 224, 218, 135, 147, 260],
    23. type: "line", //折线图
    24. },
    25. {
    26. data: [50, 30, 24, 18, 35, 147, 260],
    27. type: "line", //折线图
    28. },
    29. {
    30. data: [150, 230, 224, 218, 135, 147, 260],
    31. type: "bar", //柱状图
    32. },
    33. ],
    34. };

    3、legend图例

    1. const option = {
    2. title:{
    3. text:'统计图',
    4. link:'https://www.baidu.com/',//跳转路径
    5. target:'blank',//在新页面打开
    6. textStyle:{
    7. color:"blue",
    8. fontSize:'26',
    9. fontWeight:"bold",
    10. },
    11. left:'center',
    12. },
    13. legend: {
    14. data: ['1', '2', '3'],//对应的系列
    15. left:'right',
    16. },
    17. xAxis: {
    18. type: "category",
    19. data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
    20. },
    21. yAxis: {
    22. type: "value",
    23. },
    24. series: [
    25. {
    26. name:'1',//对应图例
    27. data: [150, 230, 224, 218, 135, 147, 260],
    28. type: "line", //折线图
    29. },
    30. {
    31. name:'2',
    32. data: [50, 30, 24, 18, 35, 147, 260],
    33. type: "line", //折线图
    34. },
    35. {
    36. name:'3',
    37. data: [150, 230, 224, 218, 135, 147, 260],
    38. type: "bar", //柱状图
    39. },
    40. ],
    41. };

    4、tooltip提示框

    1. const option = {
    2. title:{
    3. text:'统计图',
    4. link:'https://www.baidu.com/',//跳转路径
    5. target:'blank',//在新页面打开
    6. textStyle:{
    7. color:"blue",
    8. fontSize:'26',
    9. fontWeight:"bold",
    10. },
    11. left:'center',
    12. },
    13. legend: {
    14. data: ['1', '2', '3'],//对应的系列
    15. left:'right',
    16. },
    17. tooltip:{
    18. show:true,//展示
    19. trigger:'axis',//同时显示三种数据,方便对比
    20. },
    21. xAxis: {
    22. type: "category",
    23. data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
    24. },
    25. yAxis: {
    26. type: "value",
    27. },
    28. series: [
    29. {
    30. name:'1',//对应图例
    31. data: [150, 230, 224, 218, 135, 147, 260],
    32. type: "line", //折线图
    33. },
    34. {
    35. name:'2',
    36. data: [50, 30, 24, 18, 35, 147, 260],
    37. type: "line", //折线图
    38. },
    39. {
    40. name:'3',
    41. data: [150, 230, 224, 218, 135, 147, 260],
    42. type: "bar", //柱状图
    43. },
    44. ],
    45. };


    五、地图

    1、前期准备

    (1)获取JSON格式地图信息文档

    DataV.GeoAtlas地理小工具系列由阿里云DataV数据可视化团队出品,多年深耕数据可视化领域,数据大屏业务开拓者和领航者。致力用震撼而清晰的视觉语言,让更多人读懂大数据,受惠数据驱动的决策方式。icon-default.png?t=N7T8http://datav.aliyun.com/portal/school/atlas/area_selector?spm=a2crr.23498931.0.0.29b915ddWQjcfk(2)下载需要的数据,小编以福建省为例子

    (3)放入静态文件夹assets中

    (4)引入、注册地图

    1. <script>
    2. import * as echarts from 'echarts';
    3. // 引入
    4. import map from "@/assets/福建省.json";
    5. export default {
    6. name: 'ThreeTwoMapView',
    7. data() {
    8. return {
    9. };
    10. },
    11. mounted() {
    12. },
    13. methods: {
    14. init(){
    15. const dom = document.getElementById('MapPage')
    16. this.chart = echarts.init(dom)
    17. // 注册地图
    18. echarts.registerMap('Fujian',map)
    19. // 设置配置项
    20. this.setOption()
    21. },
    22. setOption(){
    23. const option = {
    24. }
    25. option && this.chart.setOption(option);
    26. }
    27. },
    28. };
    29. script>
    30. <style lang="scss" scoped>
    31. #MapPage{
    32. width: 500px;
    33. height: 500px;
    34. }
    35. style>

    2、设置配置项

    1. setOption(){
    2. const option = {
    3. series:[
    4. {
    5. name:'福建省',
    6. type:"map",
    7. map:'Fujian',
    8. }
    9. ]
    10. }
    11. option && this.chart.setOption(option);
    12. }

    (1)roam鼠标拖拽缩放、偏移

    1. const option = {
    2. series:[
    3. {
    4. name:'福建省',
    5. type:"map",
    6. map:'Fujian',
    7. roam:true,
    8. }
    9. ]
    10. }

    (2)scaleLimit缩放限制

    1. const option = {
    2. series: [
    3. {
    4. name: "福建省",
    5. type: "map",
    6. map: "Fujian",
    7. roam: true,//是否可缩放、偏移
    8. zoom:0.5,//初始缩放比例
    9. scaleLimit:{//缩放限制
    10. min:0.5,
    11. max:10,
    12. }
    13. },
    14. ],
    15. };

    (3)itemStyle图形样式

    1. const option = {
    2. series: [
    3. {
    4. name: "福建省",
    5. type: "map",
    6. map: "Fujian",
    7. roam: true,//是否可缩放、偏移
    8. zoom:0.5,//初始缩放比例
    9. scaleLimit:{//缩放限制
    10. min:0.5,
    11. max:10,
    12. },
    13. // 文本标签
    14. label:{
    15. show:true,
    16. color:"#0000ff"
    17. },
    18. // 图形样式
    19. itemStyle:{
    20. areaColor:"#00ffff",//区域颜色
    21. borderColor:'black',//描边颜色
    22. shadowColor:'rgba(0,0,0,0.5)',//阴影颜色
    23. shadowBlur:10,//阴影的模糊大小
    24. }
    25. },
    26. ],
    27. };

    (4)emphasis高亮

    1. const option = {
    2. series: [
    3. {
    4. name: "福建省",
    5. type: "map",
    6. map: "Fujian",
    7. roam: true,//是否可缩放、偏移
    8. zoom:0.5,//初始缩放比例
    9. scaleLimit:{//缩放限制
    10. min:0.5,
    11. max:10,
    12. },
    13. // 文本标签
    14. label:{
    15. show:true,
    16. color:"#0000ff"
    17. },
    18. // 图形样式
    19. itemStyle:{
    20. areaColor:"#00ffff",//区域颜色
    21. borderColor:'black',//描边颜色
    22. shadowColor:'rgba(255,0,0,0.5)',//阴影颜色
    23. shadowBlur:10,//阴影的模糊大小
    24. },
    25. // 高亮
    26. emphasis:{
    27. label:{
    28. show:true,
    29. color:'#fff'
    30. },
    31. // 图形样式
    32. itemStyle:{
    33. areaColor:"#000",//区域颜色
    34. borderColor:'black',//描边颜色
    35. },
    36. }
    37. },
    38. ],
    39. };

    (5)选中

    1. // 选中
    2. select:{
    3. label:{
    4. show:true,
    5. color:'#fff'
    6. },
    7. // 图形样式
    8. itemStyle:{
    9. areaColor:"#0f0",//区域颜色
    10. borderColor:'black',//描边颜色
    11. },
    12. },

    3、点击事件

    1. init() {
    2. const dom = document.getElementById("MapPage");
    3. this.chart = echarts.init(dom);
    4. // 注册地图
    5. echarts.registerMap("Fujian", map);
    6. // 点击
    7. this.chart.on("click", (params) => {
    8. console.log(params);
    9. });
    10. // 设置配置项
    11. this.setOption();
    12. },


    六、动态数据渲染

    1、问题提出

    当data数据是动态的,在created的dom还没有渲染时,异步获取数据,发现图并不能绘制成功

    1. export default {
    2. name: "LineView",
    3. data() {
    4. return {
    5. arr:[],//动态数据
    6. };
    7. },
    8. created(){
    9. // dom还没有渲染
    10. this.arrApi()
    11. },
    12. mounted() {
    13. this.init();
    14. },
    15. methods: {
    16. init() {
    17. // 获取dom元素
    18. var dom = document.getElementById("line");
    19. // 初始化表
    20. this.chart = echarts.init(dom);
    21. // 设置配置项
    22. this.setOptions();
    23. },
    24. setOptions() {
    25. const option = {
    26. title: {
    27. text: "统计图",
    28. link: "https://www.baidu.com/", //跳转路径
    29. target: "blank", //在新页面打开
    30. textStyle: {
    31. color: "blue",
    32. fontSize: "26",
    33. fontWeight: "bold",
    34. },
    35. left: "center",
    36. },
    37. legend: {
    38. data: ["1", "2", "3"], //对应的系列
    39. left: "right",
    40. },
    41. tooltip: {
    42. show: true, //展示
    43. trigger: "axis", //同时显示三种数据,方便对比
    44. },
    45. xAxis: {
    46. type: "category",
    47. data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
    48. },
    49. yAxis: {
    50. type: "value",
    51. },
    52. series: [
    53. {
    54. name: "1", //对应图例
    55. data: this.arr,
    56. type: "line", //折线图
    57. },
    58. ],
    59. };
    60. option && this.chart.setOption(option);
    61. },
    62. // 模拟异步请求获取数据
    63. arrApi(){
    64. setTimeout(()=>{
    65. this.arr = [50, 30, 24, 18, 35, 147, 260]
    66. })
    67. }
    68. },
    69. };

    2、解决方案

    监听数据变化时,再次绘制即可

    1. // 监听数据变化
    2. watch:{
    3. arr:{
    4. handler(newV,oldV){
    5. console.log(newV,oldV);
    6. this.setOptions()//再次调用配置项
    7. }
    8. }
    9. },

  • 相关阅读:
    Oracle Audit Vault部署
    【React】redux和React-redux
    前端二倍图
    Linux/shell命令
    【python】基础语法
    Spring Security 6.x 系列【68】 授权篇之基于注解 & 缓存的访问控制方案
    day01-从一个基础的socket服务说起
    JetBrains Fleet初体验,如何运行一个java项目
    关于 SAP UI5 所有控件的共同祖先 - sap.ui.base.ManagedObject
    6234. 最小公倍数为 K 的子数组数目
  • 原文地址:https://blog.csdn.net/qq_51478745/article/details/132080228