可视化 | 【echarts】渐变条形+折线复合图

文章目录

  • 📚html + css
  • 📚js
    • 🐇总体框架
    • 🐇option配置项

在这里插入图片描述

📚html + css

  • html:在这主要是用于整合,将html、css、js连接在一块,虽然单个模板代码量不大,但还是先分开,之后模板运用更自如。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>可视化模板一</title>
        <link rel="stylesheet" href="./style.css">
    </head>
    <body>
        <div id="test1"></div>
    </body>
    <!-- echarts引入 -->
    <script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
    <script src="./script.js"></script>
    </html>
    
  • css:这里的css主要实现了以下几个效果:
    • ①加了一个浅浅的背景色
    • ②将图标框水平垂直居中
    • ③以视口大小为准作60%缩放
    body{
        background-color: #f5f2e9;
    }
    #test1 {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        height: 60vh;
        width: 60vw;
    }
    

📚js

🐇总体框架

  1. 使用 echarts.init方法初始化了一个 ECharts 实例,指定了一个 div 元素作为图表的容器。
  2. 定义图表的配置项option,其中包括了图表的标题、提示框、x 轴、y 轴、数据系列以及数据缩放功能等等。
  3. 通过myChart.setOption将配置项应用到echarts实例。
  4. 绑定事件处理函数myChart.resize以便让图表自适应新的窗口大小,确保图表在不同尺寸的屏幕上能够正确显示。
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('test1'));
        
    // 指定图表的配置项和数据
    var option = {};
    
    // 使用刚指定的配置项和数据显示图表。
    if (option && typeof option === 'object') {
        myChart.setOption(option);
    }
    //让图表自适应新的窗口大小
    window.addEventListener('resize', myChart.resize);
    

🐇option配置项

  • 标题
    • text: '唐朝历年人数统计':指定了标题的文本内容为“唐朝历年人数统计”。
    • left: 'center':将标题水平居中显示。
    • top: '6%':指定了标题距离容器顶部的距离为容器高度的 6% 处。这里使用百分比是为了相对于容器的高度来设定距离,而不是使用固定的像素值。
    • textStyle:用于设置标题的文本样式。其中包含了以下几个属性:
      • color: '#333':指定了标题文本的颜色为深灰色。
      • fontSize: 24:设置了标题文本的字号为 24 像素。
      • fontWeight: 'bold':将标题文本设置为粗体显示。
      • fontFamily: 'KaiTi, serif':指定了标题文本的字体为楷体(KaiTi),如果设备不支持楷体,则会回退到默认的衬线字体。
    title: {
            text: '唐朝历年人数统计', 
            left: 'center',
            top: '6%',
            textStyle: {
                color: '#333', 
                fontSize: 24, 
                fontWeight: 'bold', 
                fontFamily: 'KaiTi, serif'
            }
        }
    
  • 鼠标悬浮提示框
    • trigger: 'axis':指定了触发类型为坐标轴触发,即在鼠标指向坐标轴时触发提示。
    • formatter: function (params) { ... }:定义了一个回调函数,用于自定义提示框内容的格式
      • 通过判断 params[0].dataIndex 的值,根据不同的年份数据索引来返回不同的提示信息:如果 dataIndex 等于 2,表示年份为 650 年,返回的提示包含了人数和一些相关事件的信息。 类似地,针对其他特定的年份,返回相应的提示信息,例如 690 年、712 年、755 年等。
      • 对于其他年份,则默认返回格式为“年份: 人数(人)”的提示信息。
    tooltip: {
            trigger:'axis',
            formatter: function (params) {
                if (params[0].dataIndex === 2) { // Check for the year 650
                    return params[0].name + '年: ' + params[0].value + '(人)<br>公元649年,李治继位';
                }else if (params[0].dataIndex === 6) { // Check for the year 690
                    return params[0].name + '年: ' + params[0].value + '(人)<br>公元690年,武则天继位';
                }else if (params[0].dataIndex === 8) { 
                    return params[0].name + '年: ' + params[0].value + '(人)<br>公元712年,李隆基继位';
                }else if (params[0].dataIndex === 12) { 
                    return params[0].name + '年: ' + params[0].value + '(人)<br>公元755年,安史之乱开始';
                }else if (params[0].dataIndex === 13) { 
                    return params[0].name + '年: ' + params[0].value + '(人)<br>公元763年,安史之乱结束';
                }else if (params[0].dataIndex === 20) { 
                    return params[0].name + '年: ' + params[0].value + '(人)<br>公元835年,甘露之变';
                }else {
                    return params[0].name + '年: ' + params[0].value + '(人)';
                }
            }
        }
    
  • X轴Y轴
    • name:轴的名称。
    • data:数据(x轴的数据为一个包含年份的数组)
    • axisLine:轴线样式
      • lineStylecolor——颜色,width——宽度
    • type:类型(指定y轴类型为数值型)
    • max:y轴最大值
    • show:是否显示
    • intercal:刻度间隔
    xAxis: {
        name:'年份',
        data: ["630","640","650","660","670","680","690","700","710","720","730","740","750","760","770","780","790","800","810","820","830","840","850","860","870","880","890","900"],
        axisLine: {
            lineStyle: {
                color: '#151d29',
                width: 2
            }
        }
    },
    yAxis: {
        type: 'value',
        max: 2000,
        name: '数量统计',
        show:true,
        interval: 400,
        axisLine: {
            lineStyle: {
                color: '#151d29',
                width: 2
            }
        }
    }
    
  • 数据系列的配置:其中包含了柱状图和折线图两个数据系列的设置
    • 我们需要条形图和折线图两个数据系列,于是每个系列用{}包含,间隔用,隔开,整体用[]
    • type:类型指定,条形图是bar、折线图是line
    • barWidth:指定柱状图的宽度
    • showBackground:是否显示背景
    • itemStyle:样式设置(如color)
      • echarts.graphic.LinearGradient:创建线性渐变
      • (0, 0, 0, 1) 是线性渐变的方向,表示从 (0, 0) 点到 (0, 1) 点进行渐变,即从上到下的渐变方向。
      • [{ offset: 0, color: '#ba5b49' }, { offset: 0.7, color: '#d2a36c' }, { offset: 1, color: '#dfd6b8' }] 是渐变的颜色配置,它表示从起始点到偏移值为 0 处使用颜色 ‘#ba5b49’,到偏移值为 0.7 处使用颜色 ‘#d2a36c’,最终到达终点时使用颜色 ‘#dfd6b8’。
    • emphasis:高亮样式设置(即鼠标悬浮后的颜色变化)
    • data:数据项的具体数值
    • yAxisIndex:指定对应的y轴(有时候可以是双y轴)
    • smooth:针对折线图,是指平滑曲线
    series: [{
            type: 'bar',
            barWidth : '70%',
            showBackground: true,
            itemStyle: {
                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                { offset: 0, color: '#d2a36c' },
                { offset: 0.5, color: '#d5c8a0' },
                { offset: 1, color: '#dfd6b8' }
                ])
            },
            emphasis: {
                itemStyle: {
                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                    { offset: 0, color: '#ba5b49' },
                    { offset: 0.7, color: '#d2a36c' },
                    { offset: 1, color: '#dfd6b8' }
                ])
                }
            },
            data: [1357, 969, 1063, 1355, 1444, 1350, 1438, 1412, 1760, 1508, 1451, 1817, 1532, 1431, 1811, 1780, 1830, 1530, 1509, 1401, 1204, 1053, 380, 76, 36, 19, 12, 6],
            yAxisIndex: 0
        },{
            type: 'line',
            smooth:true,
            data: [1357, 969, 1063, 1355, 1444, 1350, 1438, 1412, 1760, 1508, 1451, 1817, 1532, 1431, 1811, 1780, 1830, 1530, 1509, 1401, 1204, 1053, 380, 76, 36, 19, 12, 6],
            yAxisIndex: 0
        }]
    
  • 底部滑动条(数据缩放功能):dataZoom允许用户在图表中选择特定区域进行放大或缩小操作。
    • 第一个对象表示外部数据缩放组件,show: true表示显示该数据缩放组件。start: 0表示数据缩放的起始位置为 0,即最左边。end: 100表示数据缩放的结束位置为 100,即最右边。
    • 第二个对象表示内部数据缩放组件,type: 'inside' 表示内部数据缩放组件,允许在图表内部进行缩放操作。start: 0 表示数据缩放的起始位置为 0,即最左边。 end: 100 表示数据缩放的结束位置为 100,即最右边。
    dataZoom: [
            {
                show: true,
                start: 0,
                end: 100
            },
            {
                type: 'inside',
                start: 0,
                end: 100
            }
        ]
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI语音合成工具-Lalamu Studio

近期&#xff0c;Lalamu Studio开启了beta版本测试&#xff1a;Lalamu Studio。该工具整合了TTS和lip sync功能&#xff0c;可以让任意视频中的人物开口说话&#xff0c;并精确模拟口型。 例如&#xff0c;选择一段视频素材&#xff0c;添加由Ai合成的语音&#xff0c;即可完成…

MyBatis 系列:MyBatis 源码环境搭建

文章目录 一、环境准备二、下载 MyBatis 源码和 MyBatis-Parent 源码三、创建空项目、导入项目四、编译 mybatis-parent五、编译 mybatis六、测试总结 一、环境准备 jdk&#xff1a;17 maven&#xff1a;3.9.5 二、下载 MyBatis 源码和 MyBatis-Parent 源码 Mybatis&#x…

求职中遇到的性格测试

怎样才能不被刷? 最主要的就是自己的性格特征跟当前应聘的岗位是否相符合&#xff0c;这个符合程度越高&#xff0c;通过率自然也就越高。正规的做法都有一个岗位模型&#xff0c;也叫岗位胜任力模型。 以大五人格测试为例&#xff0c;完整版包含30个性格维度&#xff0c;从…

Pyro —— 简介

目录 Differences between legacy and sparse pyro Getting started with pyro using shelf tools Related pyro nodes Sourcing DOP simulation SOP simulation Post-Processing Rendering Simple FX shelf tools Pyro为Houdini的体积流体&#xff08;volumetric flu…

一篇文章搞懂什么是测试,测试是干什么的?

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

【STM32CubeMX串口通信详解】USART2 -- DMA发送 + DMA空闲中断 接收不定长数据

&#xff08; 本篇正在编写、更新状态中.....) 文章目录&#xff1a; 前言 前言 本篇&#xff0c;详细地用截图解释 CubeMX 对 USART2 的配置&#xff0c;HAL函数使用&#xff0c;和收发程序的编写。 收、发机制&#xff1a;DMA发送 DAM空闲中断接收。 DMA空…

Kafka-消费者-KafkaConsumer分析-Rebalance

在开始介绍Rebalance操作的实现细节之前&#xff0c;我们需要明确在哪几种情况下会触发Rebalance操作&#xff1a; 有新的消费者加入Consumer Group。有消费者宕机下线。消费者并不一定需要真正下线&#xff0c;例如遇到长时间的GC、网络延迟导致消费者长时间未向GroupCoordin…

ISA Server2006部署RuoYi无法登录的问题

ISA Server2006部署RuoYi无法正常登录。每次登录都会报错如下&#xff1a; 无效的会话&#xff0c;或者会话已过期&#xff0c;请重新登录。 原因分析 在nginx中部署没有问题&#xff0c;在ISA Server就会报这个错。根据登录的原理&#xff0c;我猜测可能是headr中的Author…

Linux:软件包管理器 yum

提示&#xff1a;以下指令均在Xshell 7 中进行 什么是软件包&#xff1f; 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放…

JVM篇--垃圾回收高频面试题

JVM垃圾回收 1 简单说下Java垃圾回收机制&#xff1f; 首先在java运行过程中&#xff0c;其实程序员并不需要去显示的调用程序来释放对象的内存&#xff0c;而是由虚拟机来完成的&#xff0c;具体来看是在jvm中有个垃圾回收线程&#xff0c;这个线程是个守护线程&#xff0c;…

pytest实现多进程与多线程运行超好用的插件

前言 如果想分布式执行用例&#xff0c;用例设计必须遵循以下原则&#xff1a; 1、用例之间都是独立的&#xff0c; 2、用例a不要去依赖用例b 3、用例执行没先后顺序&#xff0c; 4、随机都能执行每个用例都能独立运行成功每个用例都能重复运行&#xff0c;不影响其它用例 这…

假设检验:以样本服从二项分布举例

目录 假设检验一、假设检验的思想二、假设检验的基本步骤1. 确定要进行检验的假设2. 选择检验统计量。3. 确定用于做决策的拒绝域4. 求出检验统计量的值5. 查看样本结果是否位于拒绝域内6. 做出决策 三、举例说明例子1——某公司治疗打鼾例子2——女士品茶的故事 假设检验 一、…

python爬虫知识点:5种线程锁

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 线程安全 线程安全是多线程或多进程编程中的一个概念&#xff0c;在拥有共享数据的多条线程并行执行的程序中&#xff0c;线程安全的代码会通过同步机制保证各个…

细说JavaScript事件处理(JavaScript事件处理详解)

js语言的一个特色和就是它的动态性&#xff0c;即一时间驱动的方式对用户输入作出反应而不需要依赖服务器端程序。事件是指人机交互的结果&#xff0c;如鼠标移动、点击按钮、在表单中输入数据或载入新的Web洁面等。 一、什么是事件 1、事件类型 1.1、事件源 1.2、事件处理…

【数据结构】详谈队列的顺序存储及C语言实现

循环队列及其基本操作的C语言实现 前言一、队列的顺序存储1.1 队尾指针与队头指针1.2 基本操作实现的底层逻辑1.2.1 队列的创建与销毁1.2.2 队列的增加与删除1.2.3 队列的判空与判满1.2.4 逻辑的局限性 二、循环队列2.1 循环队列的实现逻辑一2.2 循环队列的实现逻辑二2.3 循环队…

Git 配置与理解

简述 Git 在 Windows 和 Ubuntu 中的配置&#xff0c;以及对 Git 工作区域划分和 Git 中对于文件状态划分的理解。 git 基础安装与配置 基于 WSL 的 Ubuntu 下的 git 打开或关闭Windows功能 -> Hyper-V、Virtual Machine Platform、Windows Subsystem for Linux # 1.必须…

傲空间私有部署Windows指南

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 安装 docker 请下载对应的 Docker&#xff0c;安装完成后启动。 Docker Desktop for Windows…

【Linux取经路】初探进程地址空间

文章目录 一、历史问题回顾二、语言层面的地址空间2.1 验证 三、虚拟地址的引入3.1 初步解释这种现象——引入地址空间的概念3.2 再来粗粒度理解上面的现象 四、细节解释4.1 地址空间究竟是什么&#xff1f;4.2为什么要有地址空间4.3 页表4.3.1 CR3寄存器4.3.2 页表是由页表项组…

智慧校园大数据应用系统介(3)

智能巡课系统 巡课系统是一种新的课堂观察记录工具,它将学校或区域内全体教师作为一个整体,采用数字化手段描述教师和学生的课堂行为。通过移动端实时记录和通用性的统计分析,使教育者更容易发现教学过程与教学成果之间的联系,有助于改变课堂生态、提高教学有效性、提升教…

Codeforces Round 895 (Div. 3)补题

Two Vessels&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;有两个无限容器&#xff0c;目前一个容器中有a克水&#xff0c;另一个容器中有b克水&#xff0c;现有一个大小为cg的容器&#xff0c;我们每次可以从一个无限容器中取任意不大于c克的水&…