echarts入门到实战

news2025/1/24 22:46:24

官网地址:Apache ECharts

前言

我们应该经常看到或听到”数据可视化“这个词,他其实就是将数据通过各种图表更加直观的展现变化趋势,对比,峰值等等。数据可视化也是未来的趋势。

作为前端程序员,数据可视化也是我们必备的一个技能,怎么获取这个技能呢,其实我们只需要掌握一个图表库即可。目前,最常用的图表库是echarts。下面就从三个方面去认识这个图表库

1.helloworld

        ->代码层面:有一个整体的印象

        ->看到效果,可以激发我们的学习兴趣

2.整体认知

        ->对主干知识进行一一解说

        ->新手不至于迷失在海量的api中

        ->达到效果:对echarts有一个整体的认知,而不是零散的知识

3.实战开发

        ->模拟工作中开发图表的过程

        ->注意:工作中开发一定不是一行一行代码敲出来的,一定有技巧的,这个后面具体再讲

helloworld

1.安装:npm install echarts --save

2.引入:import * as echarts from 'echarts';

3.初始化:

// 基于准备好的dom,初始化echarts实例

var myChart = echarts.init(document.getElementById('main'));

4设置配置项:

myChart.setOption({

   xAxis: {     data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']   },  

   yAxis: {},  

   series: [    

          {       name: '销量',      

                  type: 'bar',      

                  data: [5, 20, 36, 10, 10, 20]    

          }  

   ]

});

整体认知

下面就是从echarts中抽离出来的主干知识:

图表容器,样式,数据集,数据转换,坐标轴,视觉映射,图例,事件与行为

①图表容器

这里和我们vue非常类似,就是我们定义一个图表实例后,应该将这个实例挂载到哪个dom元素节点上。这样才能在浏览器渲染出来。

var myChart = echarts.init(document.getElementById('main'));

②样式

样式是图表的重中之重,图表就是通过视觉表达数据的。所以这一块我们要好好了解一下

①颜色主题(Theme)

        最简单的更改全局样式的方式,是直接采用颜色主题(theme)

②调色盘

         具体见下图

③直接样式设置(itemStyle、lineStyle、areaStyle、label、...)

         这一部分是重点,我们直接通过api文档来了解一下这些配置,看看哪些地方用到了style相关的配置。

④视觉映射(visualMap)

         通过下方案例学习一下

        

 

 

视觉映射代码:

option = {
  visualMap:{
    // show:false,
    min:0,
    max:40,
    inRange:{
       color: ['red', 'blue', 'yellow'],
    }
  },
  series: [
    {
      name: 'Nightingale Chart',
      type: 'pie',
      radius: [50, 250],
      center: ['50%', '50%'],
      roseType: 'area',
      itemStyle: {
        borderRadius: 8
      },
      data: [
        { value: 40, name: 'rose 1' },
        { value: 38, name: 'rose 2' },
        { value: 32, name: 'rose 3' },
        { value: 30, name: 'rose 4' },
        { value: 28, name: 'rose 5' },
        { value: 20, name: 'rose 6' },
        { value: 10, name: 'rose 7' },
        { value: 5, name: 'rose 8' }
      ]
    }
  ]
};

③数据集

数据集(dataset)是专门用来管理数据的组件。虽然每个系列都可以在 series.data 中设置数据,但是从 ECharts4 支持数据集开始,更推荐使用数据集来管理数据。因为这样,数据可以被多个组件复用,也方便进行 “数据和其他配置” 分离的配置风格。毕竟,在运行时,数据是最常改变的,而其他配置大多并不会改变。

option = {
  xAxis: {
    type: 'category',
    data: ['丰田', '本田', '特斯拉', '奇瑞']
  },
  yAxis: {},
  series: [
    {
      type: 'bar',
      name: '2015',
      data: [89.3, 92.1, 94.4, 85.4]
    }
  ]
};



//使用dateSet


option = {
  legend: {},
  tooltip: {},
  dataset: {
    // 提供一份数据。
    source: [
      ['产品', '2015'],
      ['丰田', 43.3],
      ['本田', 83.1],
      ['特斯拉', 86.4],
      ['奇瑞', 72.4]
    ]
  },
  // 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到 dataset 第一列。
  xAxis: { type: 'category' },
  // 声明一个 Y 轴,数值轴。
  yAxis: {},
  // 声明 bar 系列
  series: [{ type: 'bar' }]
};

④数据转换

Apache EChartsTM 5 开始支持了“数据转换”( data transform )功能。在 echarts 中,“数据转换” 这个词指的是,给定一个已有的“数据集”(dataset)和一个“转换方法”(transform),echarts 能生成一个新的“数据集”,然后可以使用这个新的“数据集”绘制图表。这些工作都可以声明式地完成。

var option = {
  dataset: [
    {
      // 这个 dataset 的 index 是 `0`。
      source: [
        ['Product', 'Sales', 'Price', 'Year'],
        ['Cake', 123, 32, 2011],
        ['Cereal', 231, 14, 2011],
        ['Tofu', 235, 5, 2011],
        ['Dumpling', 341, 25, 2011],
        ['Biscuit', 122, 29, 2011],
        ['Cake', 143, 30, 2012],
        ['Cereal', 201, 19, 2012],
        ['Tofu', 255, 7, 2012],
        ['Dumpling', 241, 27, 2012],
        ['Biscuit', 102, 34, 2012],
        ['Cake', 153, 28, 2013],
        ['Cereal', 181, 21, 2013],
        ['Tofu', 395, 4, 2013],
        ['Dumpling', 281, 31, 2013],
        ['Biscuit', 92, 39, 2013],
        ['Cake', 223, 29, 2014],
        ['Cereal', 211, 17, 2014],
        ['Tofu', 345, 3, 2014],
        ['Dumpling', 211, 35, 2014],
        ['Biscuit', 72, 24, 2014]
      ]
      // id: 'a'
    },
    {
      // 这个 dataset 的 index 是 `1`。
      transform: {
        type: 'filter',
        config: { dimension: 'Year', value: 2011 }
      }
    },
    {
      // 这个 dataset 的 index 是 `2`。
      transform: {
        type: 'filter',
        config: { dimension: 'Year', value: 2012 }
      }
    },
    {
      // 这个 dataset 的 index 是 `3`。
      transform: {
        type: 'filter',
        config: { dimension: 'Year', value: 2013 }
      }
    }
  ],
  series: [
    {
      type: 'pie',
      radius: 50,
      center: ['25%', '50%'],
      datasetIndex: 0
    },
     {
      type: 'pie',
      radius: 50,
      center: ['37%', '20%'],
      datasetIndex: 1
    },
    {
      type: 'pie',
      radius: 50,
      center: ['50%', '50%'],
      datasetIndex: 2
    },
    {
      type: 'pie',
      radius: 50,
      center: ['75%', '50%'],
      datasetIndex: 3
    }
  ]
};

⑤坐标轴

x 轴和 y 轴都由轴线、刻度、刻度标签、轴标题四个部分组成

 

⑥图例

 

option = {
  legend: {
    // Try 'horizontal'
    orient: 'vertical',
    right: 10,
    top: 'center'
  },
  dataset: {
    source: [
      ['product', '2015', '2016', '2017'],
      ['Matcha Latte', 43.3, 85.8, 93.7],
      ['Milk Tea', 83.1, 73.4, 55.1],
      ['Cheese Cocoa', 86.4, 65.2, 82.5],
      ['Walnut Brownie', 72.4, 53.9, 39.1]
    ]
  },
  xAxis: { type: 'category' },
  yAxis: {},
  series: [{ type: 'bar' }, { type: 'bar' }, { type: 'bar' }]
};

⑦事件与行为

这一块也是比较重要的,但是对于有前端经验的小伙伴,事件这一块和js中的事件差不多,可以类比去理解就好了

Documentation - Apache ECharts

=====事件
=================
  
// 指定图表的配置项和数据
var option = {
  xAxis: {
    data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
  },
  yAxis: {},
  series: [
    {
      name: '销量',
      type: 'bar',
      data: [5, 20, 36, 10, 10, 20]
    }
  ]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
// 处理点击事件并且跳转到相应的百度搜索页面
myChart.on('click', function(params) {
  window.open('https://www.baidu.com/s?wd=' + encodeURIComponent(params.name));
});


=================
=====行为
==================

option = {
  title: {
    text: 'Referer of a Website',
    subtext: 'Fake Data',
    left: 'center'
  },
  tooltip: {
    trigger: 'item'
  },
  legend: {
    orient: 'vertical',
    left: 'left'
  },
  series: [
    {
      name: 'Access From',
      type: 'pie',
      radius: '50%',
      data: [
        { value: 1048, name: 'Search Engine' },
        { value: 735, name: 'Direct' },
        { value: 580, name: 'Email' },
        { value: 484, name: 'Union Ads' },
        { value: 300, name: 'Video Ads' }
      ],
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        }
      }
    }
  ]
};
setTimeout(function() {
  myChart.dispatchAction({
    type: 'highlight',
    // 可选,数据项名称,在有 dataIndex 的时候忽略
    name: 'Direct',
});
  
}, 50);

实战开发

今天带大家一起来模拟一下,我们真实开发的时候,怎么去完成我们的图表开发的

 

社区资源库:

EChartsDemo集

EChartsDemo集

 

let type = ['肥料', '农药'];

option = {
    backgroundColor: '#081736',
    title: {
        show: true,
        text: '',
        textStyle: {
            align: 'rigth',
            color: '#115CB9',
            fontSize: 20,
        },
        top: '3%',
        left: '5%',
    },
    grid: {
        top: "28%",
        right: "10%",
        bottom: "18%",//也可设置left和right设置距离来控制图表的大小
    },
    tooltip: {
        // trigger: "axis",
        // backgroundColor: 'rgba(17,95,182,0.5)',
        // textStyle: {
        //     color: "#fff"
        // },
        // // axisPointer: {
        // //     type: "line",
        // //     label: {
        // //         show: false,
        // //     }
        // // },
        // formatter: (pa) => {
        //     let oneDotHtml = '<span style="display:inline-block;margin-right:5px;width:10px;height:10px;background-color:#1480C2"></span>'
        //     let twoDotHtml = '<span style="display:inline-block;margin-right:5px;width:10px;height:10px;background-color:#8957A1"></span>'
        //     // return pa[0].name + pa[0].value
        //     return (
        //         pa[0].name + '<br/>'
        //         + oneDotHtml + pa[1].seriesName + ':' + pa[1].value + "<br>"
        //         + twoDotHtml + pa[0].seriesName + ':' + pa[0].value
        //     );
        // }
    },
    dataZoom: [{
        show: false,
        xAxisIndex: 0,
        type: 'slider',
        startValue: 0,
        endValue: this.end
    }],
    legend: {
        top: "20%",
        left: '40%',
        // icon: 'rect',
        textStyle: {
            padding: [0, 0, 0, 10],
            color: "#aaaaaa",
            fontSize: 14,
            lineHeight: 16
        },
        itemGap: 50,
        itemHeight: 10,
        data: 
        [{
            name:"钢七连",
           icon:'rect',
             itemStyle:{
                // color:'#aaaaaa'
            }

        },{
            name:"老A",
             icon:'circle',
            itemStyle:{
                // color:'#aaaaaa'
            }
        }]
    },
    xAxis: {
        data: [
            "草堂镇",
            "白帝镇",
            "朱衣镇",
            "康乐镇",
            "永乐镇",
            "安坪镇"
        ],
        axisLine: {
            show: true, //隐藏X轴轴线
           lineStyle: {
                color: '#132c5c'
            }
        },
        axisTick: {
            show: false //隐藏X轴刻度
        },
        axisLabel: {
            show: true,
            textStyle: {
                padding: [5, 0, 0, 0],
                color: "#fff" //X轴文字颜色
            }
        },
    },
    yAxis: [{
        type: "value",
        name: "(吨)",
        nameTextStyle: {
            color: "#aaaaaa",
            fontSize: 14,
             align:'right'
        },
        splitLine: {
            show: true,
            lineStyle: {
                color: '#132c5c'
            }
        },
        axisTick: {
            show: false
        },
        axisLine: {
            show: true,
            lineStyle: {
                color: '#132c5c'
            }
        },
        axisLabel: {
            show: true,
            textStyle: {
                fontSize: 14,
                color: "#fff"
            }
        },
    },
    {
        type: "value",
        name: "(吨)",
        nameTextStyle: {
            color: "#aaaaaa",
            fontSize: 14,
             align:'left'
        },
        position: "right",
        splitLine: {
            show: false
        },
        axisTick: {
            show: false
        },
        axisLine: {
            show: true,
            lineStyle: {
                color: '#132c5c'
            }
        },
        axisLabel: {
            show: true,
            textStyle: {
                color: "#ffffff"
            }
        }
    },
        // {
        //     type: "value",
        //     // gridIndex: 1,
        //     min: 50,
        //     max: 100,
        //     splitNumber: 8,
        //     splitLine: {
        //         show: false
        //     },
        //     axisLine: {
        //         show: false
        //     },
        //     axisTick: {
        //         show: false
        //     },
        //     axisLabel: {
        //         show: false
        //     },
        //     splitArea: {
        //         show: true,
        //         areaStyle: {
        //             color: ["rgba(250,250,250,0.0)", "rgba(250,250,250,0.05)"]
        //         }
        //     }
        // }
    ],
    series: [{
        name: "老A",
        type: "line",
        yAxisIndex: 1, //使用的 y 轴的 index,在单个图表实例中存在多个 y轴的时候有用
        smooth: false, //平滑曲线显示
        // showAllSymbol: true, //显示所有图形。
        symbol: "circle", //标记的图形为实心圆
        symbolSize: 10, //标记的大小
        itemStyle: {
            //折线拐点标志的样式
            color: "#1df5ed"
        },
        lineStyle: {
            color: "#32749e"
        },
        areaStyle:{
            // color: 'transparent'
            //  color: ['#1df5ed','#ff0000']
            // color: "#1df5ed"
                 color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
                    offset: 0,
                    color: "#1df5ed11"
                    
                }, {
                    offset: 1,
                    color: "#1df5ed99"
                }
                ])
        },
        data: [1, 1.2, 3, 1, 1.5, 1]
    },
    {
        name: "钢七连",
        type: "bar",
        barWidth: '30%',
        showBackground: false,
        itemStyle: {
            borderColor:"#185294",
            borderWidth:2,
            color:'#0a2e73',
             shadowColor: '#185294',
    shadowBlur: 10,
    // shadowOffsetY :3,
    // shadowOffsetX:3
            // normal: {
            //     color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
            //         offset: 0,
            //         color: "red"
            //     }, {
            //         offset: 0,
            //         color: "#1F0D5E"
            //     }, {
            //         offset: 1,
            //         color: "#1480C2"
            //     }
            //     ])
            // }
        },
        label: {
            normal: {
                show: false,
                textStyle: {
                    color: '#FFF'
                },

            }
        },
        data: [14, 16, 20, 7, 15, 11]
    }
    ]
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多任务全景感知YOLOPv2:目标检测、freespace、车道线

今年年初出了一片《端到端的多任务感知网络HybridNet&#xff0c;性能优于YOLOP》&#xff0c;论文 HybridNets: End2End Perception Network&#xff0c;代码已开源&#xff0c;在目标检测、车道线、freespace的多任务感知任务上性能优于YOLOP&#xff0c;取得了新SOTA。视频效…

大厂Java面试必备面试题:基础语法-数据类型-编码-注释-运算符-关键字-流程控制语句

基础语法 数据类型 Java有哪些数据类型 定义&#xff1a;Java语言是强类型语言&#xff0c;对于每一种数据都定义了明确的具体的数据类 型&#xff0c;在内存中分配了不同 大小的内存空间。 分类&#xff1a; 基本数据类型 Java源代码---->编译器---->jvm可执行的Java字…

如果Controller里有私有的方法,能成功访问吗?

背景 写代码的时候&#xff0c;复制粘贴的时候&#xff0c;没注意到方法的属性&#xff0c;就导致了Controller里有了一个私有的方法&#xff0c;然后访问这个接口的时候就报了空指针异常&#xff0c;找了好久才找到是这个原因。 来看一个例子 Service public class MyServi…

Netty面试经典问题

目录 Netty是怎么实现高性能设计的&#xff1f; 简单介绍一下对于Netty的了解 Netty的高性能表现在哪些方面 介绍一下Java中的几种IO模型 一个通俗例子读懂BIO、NIO、AIO BIO与NIO的区别 Netty的线程模型 什么是零拷贝 Netty中的模块组件&#xff1a; Netty 中有哪种…

Linux rpm方式安装 MYSQL8.0

1.卸载原有的mysql 数据库 1&#xff09;查找安装的mysql软件包和依赖包&#xff1a; rpm -pa | grep mysql 显示结果&#xff1a; mysql80-community-release-el7-1.noarch mysql-community-server-8.0.11-1.el7.x86_64 mysql-community-common-8.0.11-1.el7.x86_64 mysql…

ReLU,Sigmoid,Tanh,softmax【基础知识总结】

一、ReLU&#xff08;Rectified Linear Activation Function&#xff09;1、优点2、缺点补充二、Sigmoid1、优点2、缺点三、Tanh四、Sigmoid 和 Tanh 激活函数的局限性五、softmax&#xff08;待补充&#xff09;激活函数的引入是为了增加神经网络模型的非线性&#xff0c;没有…

【机器学习入门项目10例】(九):聚类算法用于降维,KMeans的矢量量化应用(图片压缩)

🌠 『精品学习专栏导航帖』 🐳最适合入门的100个深度学习实战项目🐳🐙【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码🐙🐶【机器学习入门项目10例目录】项目详解 + 数据集 + 完整源码🐶🦜【机器学习项目实战10例目录】项目详解 + 数据集 +

万字长文!对比分析了多款存储方案,KeeWiDB最终选择自己来

大数据时代&#xff0c;无人不知Google的“三驾马车”。“三驾马车”指的是Google发布的三篇论文&#xff0c;介绍了Google在大规模数据存储与计算方向的工程实践&#xff0c;奠定了业界大规模分布式存储系统的理论基础&#xff0c;如今市场上流行的几款国产数据库都有参考这三…

Fama-French三因子和五因子模型和Stata代码(内附原始数据)

一、Fama-French三因子模型数据和Stata代码&#xff08;2000-2020年&#xff09; 1、数据来源&#xff1a;原始数据在分享文件中 2、时间跨度&#xff1a;2000-2020年 3、区域范围&#xff1a;全国 5、原始数据&#xff1a; 4、指标说明&#xff1a; 部分指标如下&#xff…

Linux虚拟机的克隆

文章目录&#x1f68f; Linux虚拟机的克隆&#x1f680; 克隆虚拟机&#x1f6ac; 1、虚拟机在未开启的状态下&#x1f6ac; 2、选择创建完整克隆&#x1f6ac; 3、选择虚拟机的名称和位置&#x1f684; 修改 克隆虚拟机的设置&#x1f6ac; 1、mac地址&#x1f6ac; 2、主机名…

RocketMQ安装部署

RocketMQ的物理部署结构图如下&#xff1a; Producer和Consumer对应的是我们的应用程序&#xff0c;多个NameServer实例组成集群&#xff0c;但相互独立&#xff0c;没有信息交换&#xff0c;所以对于NameServer来说部署两个或两个以上即可保证高可用&#xff0c;对于Broker来…

AWS Skill Builder - 练习 ACF 认证的第一站

AWS Skill Builder - 练习 ACF 认证的第一站 AWS Skill Builder https://explore.skillbuilder.aws/learn 是 AWS 针对要想要自学 AWS 云计算技术所提供的网站&#xff0c;里面提了很多自学的课程&#xff0c;今天要展示的是在学习完 AWS Academy Cloud Foundations 课程后&am…

车牌识别停车场智能管理系统

摘 要 本论文主要论述了如何使用JSP技术开发一个车牌识别停车场智能管理系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述车牌识别停车场智能管理系统的…

【Paraview教程】第一章安装与基础介绍

1 Paraview介绍 1.1基本介绍 ParaView是一个开源的&#xff0c;跨平台的数据处理和可视化程序。ParaView用户可以迅速的建立起可视化环境利用定量或者是定性的手段去分析数据。利用它的批量处理能力可以在三维空间内在工具栏和展示界面中进行交互操作&#xff0c;从而实现“数…

PDF中的某个图或表想几乎无损的插入ppt或者word里的方法

要使用ps打开pdf并另存为tiff或者&#xff0c;其他方法存储的tiff可能不如这种方法高清 0. 参考方法网址&#xff1a;PS导出符合投稿规范的图片 1. pdf可能很多页&#xff0c;一页内有很多图像文字&#xff0c;要先使用福昕阅读器(破解版本的)裁剪到想保留tiff的那张图或那个表…

四、nginx反向代理

一、反向代理 解释&#xff1a;nginx反向代理如正向代理原理类似&#xff0c;只是实现了不同的功能。客户端将请求发给服务端&#xff08;代理服务器&#xff09;后&#xff0c;服务端&#xff08;代理服务器&#xff09;并没有自己处理请求&#xff0c;而是交给被代理服务器&…

P4用软件实现和硬件实现的区别

摘要&#xff1a;我们目前看到从可配置性有限的固定功能网络设备向具有完全可编程处理流水线的网络设备的转变。这种发展的一个突出例子是P4&#xff0c;它提供了一种语言和参考架构模型来设计和编程网络设备。这个参考模型的核心元素是可编程匹配动作表&#xff0c;它定义了网…

[附源码]Python计算机毕业设计高校餐厅评价系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Java多线程编程【一文全解】

文章目录01 线程简介02 进程的创建> 继承 Thread 类> 实现 Runnable 接口> 实现 Callable 接口※ Lambda表达式 λ※ 静态代理模式03 线程状态04 线程方法> 停止线程 stop( )> 线程休眠 sleep( )> 线程礼让 yield( )> 线程强行执行 join( )> 线程状态观…

【疑难攻关】——XXE漏洞快速入门

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…