Echarts入门实例

news2024/11/16 3:36:04

 

Echarts是一个基于JavaScript的开源可视化库,用于构建交互式和可定制的图表和图形。它由百度开发并维护,提供了丰富多样的图表类型和强大的功能,使开发者能够简单快速地创建各种各样的数据可视化。 Echarts支持常见的图表类型,如折线图、柱状图、饼图、散点图、雷达图等,同时也支持更复杂的图表类型,如地图、热力图、关系图等。无论是简单的数据展示还是复杂的数据分析,Echarts都提供了丰富的图表选项和配置,以满足不同场景的需求。

一、入门实例

1.官网地址 快速上手 - Handbook - Apache ECharts

echarts.js

根据入门示例编写html页面

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <!-- 引入刚刚下载的 ECharts 文件 -->
    <script src="echarts.js"></script>
  </head>
  <body>
  <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
  <div id="main" style="width: 600px;height:400px;"></div>
  <script type="text/javascript">
      // 基于准备好的dom,初始化echarts实例
      var myChart = echarts.init(document.getElementById('main'));
	  // 指定图表的配置项和数据
      var option = {
        title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
          data: ['销量']
        },
        xAxis: {
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }
        ]
      };

      // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(option);
</script>
</body>
</html>

效果如下 

 官方实例

更多示例可在官网查询,除了基本的图表功能,Echarts还支持多种交互和动画效果,如数据区域缩放、数据刷选、图表切换、动态更新等。这使得用户可以通过交互方式深入探索数据,并以更生动、直观的方式呈现数据的变化和趋势。 总之,Echarts是一个功能强大、易于使用的数据可视化库,它为开发者提供了丰富的图表类型、灵活的配置和强大的交互功能,帮助开发者将数据以可视化的方式展示出来,从而更好地理解和传达数据。

 在实例图中可以下载对应的html文件,也可以在左侧修改代码即时呈现出效果展示在页面中

 二、项目实例(静态数据) 

 本文是按照黑马传智健康修改,仅供参考

HTML页面

<!DOCTYPE html>
<html>
    <head>
        <!-- 页面meta -->
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>传智健康</title>
        <meta name="description" content="传智健康">
        <meta name="keywords" content="传智健康">
        <meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport">
        <!-- 引入样式 -->
        <link rel="stylesheet" href="../css/style.css">
        <script src="../plugins/echarts/echarts.js"></script>
    </head>
    <body class="hold-transition">
        <div id="app">
            <div class="content-header">
                <h1>统计分析<small>会员数量</small></h1>
                <el-breadcrumb separator-class="el-icon-arrow-right" class="breadcrumb">
                    <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
                    <el-breadcrumb-item>统计分析</el-breadcrumb-item>
                    <el-breadcrumb-item>会员数量</el-breadcrumb-item>
                </el-breadcrumb>
            </div>
            <div class="app-container">
                <div class="box">
                    <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
                    <div id="chart1" style="height:500px;"></div>
                </div>
            </div>
        </div>
    </body>
    <!-- 引入组件库 -->
    <script src="../js/vue.js"></script>
    <script src="../js/axios-0.18.0.js"></script>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart1 = echarts.init(document.getElementById('chart1'));

        // 使用刚指定的配置项和数据显示图表。
        //myChart.setOption(option);

        axios.get("/report/getMemberReport.do").then((res)=>{
            myChart1.setOption(
                                {
                                    title: {
                                        text: '会员数量'
                                    },
                                    tooltip: {},
                                    legend: {
                                        data:['会员数量']
                                    },
                                    xAxis: {
                                        data: res.data.data.months
                                    },
                                    yAxis: {
                                        type:'value'
                                    },
                                    series: [{
                                        name: '会员数量',
                                        type: 'line',
                                        data: res.data.data.memberCount
                                    }]
                                });
        });
    </script>
</html>

 根据折现图的数据格式要求,服务端需要返回如下格式的数据:

{
	"data":{
			"months":["2019.01","2019.02","2019.03","2019.04"],
			"memberCount":[3,4,8,10]
		   },
	"flag": true,
	"message":"获取会员统计数据成功"
}

 模拟假数据,静态数据测试接口

@RestController
@RequestMapping("/report")
public class ReportController {

    @RequestMapping("/getMemberReport")
    public Result getMemberReport() {
        //使用模拟数据测试对象格式是否能转为echarts所需的数据格式
        Map<String,Object> map = new HashMap<>();
        List<String> months = new ArrayList<>();
        months.add("2023-05");
        months.add("2023-06");
        months.add("2023-07");
        months.add("2023-08");
        months.add("2023-09");
        map.put("months",months);

        List<Integer> memberCount = new ArrayList<>();
        memberCount.add(100);
        memberCount.add(150);
        memberCount.add(180);
        memberCount.add(200);
        memberCount.add(240);
        map.put("memberCount",memberCount);

        return new  Result(true, MessageConstant.GET_MEMBER_NUMBER_REPORT_SUCCESS,map);
    }
}

 更改了项目中的超链接

假数据的效果如下 

 返回json数据格式

 三、项目传智健康实例(SSM+mysql)

ReportController

@RestController
@RequestMapping("/report")
public class ReportController {
    @Reference
    private MemberService memberService;


    //会员折线图数据
    @RequestMapping("/getMemberReport")
    public Result getMemberReport() {

        //通过日历实例获得日历对象,模拟时间就是当前时间
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MONTH, -12);//获得当前日期之前12个月的日期

        List<String> list = new ArrayList<>();
        for (int i = 0; i < 12; i++) {
            calendar.add(Calendar.MONTH, 1);
            list.add(new SimpleDateFormat("yyyy-MM").format(calendar.getTime()));
        }
        Map<String, Object> map = new HashMap<>();
        map.put("months", list);

        List<Integer> memberCount = memberService.findMemberCountByMonth(list);
        map.put("memberCount", memberCount);

        return new Result(true, MessageConstant.GET_MEMBER_NUMBER_REPORT_SUCCESS, map);

    }
}

MemberService

public interface MemberService {
    public List<Integer> findMemberCountByMonth(List<String> list) ;
}

MemberServiceImpl

@Service(interfaceClass = MemberService.class)
@Transactional
public class MemberServiceImpl implements MemberService {

    @Autowired
    private MemberDao memberDao;

    //根据月份查询会员数量
    public List<Integer> findMemberCountByMonth(List<String> months) {
        List<Integer> list = new ArrayList<>();
        for (String month : months) {
            String dateString = month;
            YearMonth yearMonth = YearMonth.parse(dateString);
            int m1 = yearMonth.getMonthValue();
            if (m1 == 2) {
                //这里考虑2月份数据库会报错,但其他月份没考虑到,代码有瑕疵
                String date = month + "-30";
            } else {
                String date = month + "-30";//格式:2019.04.31}

                Integer count = memberDao.findMemberCountBeforeDate(date);
                list.add(count);
            }
        }
        return list;
    }
}

 MemberDao

public interface MemberDao {
    Integer findMemberCountBeforeDate(String date);
}

MemberDao.xml

<!--根据日期统计会员数,统计指定日期之前的会员数-->
<select id="findMemberCountBeforeDate" parameterType="string" resultType="int">
    select count(id) from t_member where regTime &lt;= #{value}
</select>

数据库模拟数据

 效果展示

 四、总结

Echarts具有以下主要功能:

  1. 多种图表类型:Echarts支持常见的图表类型,如折线图、柱状图、饼图、散点图、雷达图等。它还支持更复杂的图表类型,如地图、热力图、关系图等。
  2. 丰富的配置选项:Echarts提供了丰富的配置选项,可以定制图表的样式、数据和交互方式。开发者可以自定义图表的颜色、字体、线条样式等,以及数据的格式和显示方式。
  3. 强大的交互功能:Echarts支持多种交互和动画效果,如数据区域缩放、数据刷选、图表切换、动态更新等。这些交互功能使用户可以通过操作图表深入探索数据,并以更生动、直观的方式呈现数据的变化和趋势。
  4. 兼容性和跨平台:Echarts具有良好的兼容性,可以在各种现代浏览器上运行,并且可以与常见的前端框架(如Vue、React、Angular)无缝集成。它还支持移动设备上的展示,可以在移动端上呈现优雅的图表效果。
  5. 数据可视化:Echarts帮助开发者将数据以可视化的方式展示出来,使数据更易于理解和传达。通过图表的可视化效果,开发者可以更直观地展示数据的关系、变化和趋势,从而更好地进行数据分析和决策。 总的来说,Echarts是一个功能强大、易于使用的数据可视化库,它提供了多种图表类型、丰富的配置选项和强大的交互功能,帮助开发者实现高度定制化的数据可视化展示。无论是简单的数据展示还是复杂的数据分析,Echarts都能满足各种需求,并提供优秀的用户体验。

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

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

相关文章

730. 机器人跳跃问题

输入样例1&#xff1a; 5 3 4 3 2 4输出样例1&#xff1a; 4输入样例2&#xff1a; 3 4 4 4输出样例2&#xff1a; 4输入样例3&#xff1a; 3 1 6 4输出样例3&#xff1a; 3代码 //首先我们要分情况讨论 //1.后面的大&#xff1a;EE-(h-E)2E-h //2.后面的小&#xff1a;…

idea插件开发-自定义语言03-Parse and PSI

在 IntelliJ 平台中解析文件是一个两步过程&#xff1a; 首先&#xff0c;构建抽象语法树 (AST)&#xff0c;定义程序的结构。AST 节点由 IDE 在内部创建&#xff0c;具体是由类ASTNode类来创建的。 每个 AST 节点都有一个关联的元素类弄IElementType实例&#xff0c;元素类型…

springboot整合myabtis+mysql

一、pom.xml <!--mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--springboot与JDBC整合包--><dependency><groupId>org.springframework.b…

Banana Pi BPI-P2 Zero 开源硬件物联网开发板基准测试和评论

Banana Pi P2 Zero 和 P2 Maker 是基于 Allwinner 的 H3 和 H2 芯片组的廉价主板。它们以低廉的价格提供了一些有趣的功能&#xff0c;具有很大的吸引力&#xff0c;但由于其老化的 32 位架构和平庸的软件支持而有些令人失望。BPi-P2 板最适合作为无头边缘平台&#xff0c;具有…

JAVA SE -- 第十一天

&#xff08;全部来自“韩顺平教育”&#xff09; 异常-Exception 一、异常介绍 1、基本介绍 Java语言中&#xff0c;将程序执行中发生的不正常情况为“异常”&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 2、执行过程中发生的异常事件可分为两大类 …

ChatGPT与高等教育变革:价值、影响及未来发展

最近一段时间&#xff0c;ChatGPT吸引了社会各界的目光&#xff0c;它可以撰写会议通知、新闻稿、新年贺信&#xff0c;还可以作诗、写文章&#xff0c;甚至可以撰写学术论文。比尔盖茨、马斯克等知名人物纷纷为此发声&#xff0c;谷歌、百度等知名企业纷纷宣布要提供类似产品。…

Windows系统远程桌面访问统信Uos社区版Deepin系统的正确方法

文章目录 0、前言1、安装X11vnc2、安装xrdp3、在Windows中以远程桌面连接3.1、可以以xorg方式远程桌面连接3.2、以vnc方式远程桌面连接黑屏 0、前言 前段时间写了篇博文【UnRaid虚拟机安装Uos家庭版并由Windows远程桌面访问的成功流程】&#xff0c;成功实现远程桌面方式登录U…

用asp.net开发h5网页版视频播放网站,类似优酷,jellyfin,emby

之前用jellyfin开源软件搞了一个视频播放服务器,用来共享给家里人看电影和电视剧,jellyfin虽然各方面功能都很强大,但是界面和使用习惯都很不适合,于是就想着利用下班休息时间做一套自己喜欢的视频网站出来. 本来是打算直接用jellyfin的源码进行修改,源码是用C# netcore 写的服…

安全学习DAY10_HTTP数据包

文章目录 HTTP数据包![请添加图片描述](https://img-blog.csdnimg.cn/32eb72ceb2d6453b94487edb1a940a43.png)Request请求数据包结构Request请求方法&#xff08;方式&#xff09;请求头&#xff08;Header&#xff09;Response响应数据包结构Response响应数据包状态码状态码作…

SQL-每日一题【1050. 合作过至少三次的演员和导演】

题目 ActorDirector 表&#xff1a; 查询合作过至少三次的演员和导演的 id 对 (actor_id, director_id) 示例 1&#xff1a; 解题思路 1.题目要求我们查询出合作过至少三次的演员和导演的 id 对&#xff0c;我们可以 group by 两次来解决这个问题。 2.首先我们按照 actor_id 进…

Pycharm debug程序,跳转至指定循环条件/循环次数

在断点出右键&#xff0c;然后设置条件 示例 for i in range(1,100):a i 1b i 2print(a, b, i) 注意&#xff1a; 1、你应该debug断点在循环后的位置而不是循环上的位置&#xff0c;然后你就可以设置你的条件进入到指定的循环上了 2、设置条件&#xff0c;要使用等于符号…

【C++ 进阶】第 1 章:[C 语言基础] C 语言概述与数据类型

目录 一、C 语言的概述 &#xff08;1&#xff09;计算机结构组成 &#xff08;2&#xff09;计算机系统组成 &#xff08;3&#xff09;ASCII 码 &#xff08;4&#xff09;计算机中的数制及其转换 &#xff08;5&#xff09;程序与指令 &#xff08;6&#xff09;语…

Diffusion扩散模型学习3——Stable Diffusion结构解析-以图像生成图像(图生图,img2img)为例

Diffusion扩散模型学习3——Stable Diffusion结构解析-以图像生成图像&#xff08;图生图&#xff0c;img2img&#xff09;为例 学习前言源码下载地址网络构建一、什么是Stable Diffusion&#xff08;SD&#xff09;二、Stable Diffusion的组成三、img2img生成流程1、输入图片编…

Mysql操作多表查询

多表查询是指在关系型数据库中&#xff0c;通过同时查询多个数据表来检索相关数据的操作。这种查询方式通常用于需要在多个数据表中搜索和比较数据的情况&#xff0c;以获取更完整和准确的结果。 在多表查询中&#xff0c;使用联接&#xff08;join&#xff09;操作将多个表连…

【Spring框架】SpringBoot创建和使用

目录 什么是SpringBoot&#xff1f;SpringBoot优点创建SpringBootSpringBoot使用 什么是SpringBoot&#xff1f; Spring 的诞⽣是为了简化 Java 程序的开发的&#xff0c;⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发的。 SpringBoot优点 1.起步依赖(创建的时候就可以方…

day47-SSM分页

SSM分页&#xff08;增删改查登录注册&#xff09; applicationContext.xml中加入mybatis-config.xml路径 mybatis-config.xml Mapper接口 Service接口及其实现类 Mapper.xml page.jsp personDetail.jsp addPerson.jsp updatePerson.jsp login.jsp regist…

DMA传输原理与实现详解(超详细)

DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;是一种计算机数据传输方式&#xff0c;允许外围设备直接访问系统内存&#xff0c;而无需CPU的干预。 文章目录 Part 1: DMA的工作原理配置阶段&#xff1a;数据传输阶段&#xff1a; Part 2: DMA数据…

【弹力设计篇】聊聊灾备设计、异地多活设计

单机&集群架构 对于一个高可用系统来说&#xff0c;为了提升系统的稳定性&#xff0c;需要以下常用技术服务拆分、服务冗余、限流降级、高可用架构设计、高可用运维&#xff0c;而本篇主要详细介绍下&#xff0c;高可用架构设计。容灾备份以及同城多活&#xff0c;异地多活…

Python开发之手动实现一维线性插值

Python开发之手动实现一维线性插值 1.线性插值法介绍2.手动实现线性插值3.案例一手动实现线性插值4.使用pandas的插值方法实现要求(推荐) 前言&#xff1a;主要介绍手动实现一维线性插值以及pandas里面的interpolate方法实现线性插值。 1.线性插值法介绍 线性插值法是一种简单…

MySQL中锁的简介——行级锁之 间隙锁 和 临键锁

1.间隙锁演示 2.临键锁演示 间隙锁锁住的是间隙&#xff0c;不包含对应的数据记录&#xff0c;而临键锁既会包含当前这条数据记录&#xff0c;也会锁定该数据记录之前的间隙。间隙锁的目的是防止其他事务插入间隙造成幻读现象。间隙锁是可以共存的&#xff0c;一个事务采用的间…