echarts 中如何添加左右滚动条 数据如何进行堆叠如何配置那些数据使用那个数据轴

news2024/11/19 5:24:43

左右滚动条的效果

此项的具体配置可参考 https://echarts.apache.org/zh/option.html#dataZoom-inside.moveOnMouseWheel

dataZoom: [{
          id: 'dataZoomX',
          type: 'inside',
          // start: 0,
          // end: this.xAxis.length > 5 ? 10 : 100,
          startValue: this.xAxis.length > 5 ? 5 : 0,//数据窗口范围的起始数值(绝对数值)。如果设置了dataZoom-inside.start 则startValue失效。具体可以参考echarte中的配置项
          endValue: this.xAxis.length > 5 ? 9 : 100,
          zoomOnMouseWheel: false,//表示不按任何功能键,鼠标滚轮能触发缩放
          moveOnMouseMove: true,//表示不按任何功能键,鼠标移动能触发数据窗口平移
          moveOnMouseWheel: true//表示不按任何功能键,鼠标移动能触发数据窗口平移。
        }],

数据堆叠效果

{
  name: '累计收入',
    type: 'bar',
    // 数据堆叠
    stack: 'total', 
    // 柱形图宽度
    barMaxWidth:8,
    // barGap:"50%",
    itemStyle:{
      color: '#FF7F50'
    },
    data:this.dataItem.accumulatedIncome
  },

svg生成lengend图标

legend: {
    top: 14,
    // right:3,
    itemHeight:10,
    itemWidth:12,
    textStyle:{
      fontSize:14,
      color:"#000"
    },
    data: [
      {name:"累计收入",icon:"path://m 0 -1 h 10 v 10 h -10z"},
      {name:"预计收入",icon:"path://m 0 -1 h 10 v 10 h -10z"},
      {name:"累计实际收入",icon:"path://m 0 -1 h 10 v 2 h -12z"},
      {name:"累计预计收入",icon:"path://m 0 -1 h 10 v 2 h -12z"}
    ]
  },

demo代码

<!-- eslint-disable eqeqeq -->
<!-- eslint-disable no-undef -->
<template>
  <div>
    <div ref='demo5' style="width:800px;height: 600px;"></div>
  </div>
</template>
<script>
import * as echarts from "echarts";
export default {
  data() {
    return {
      xAxis:['周一','周二','周三','周四','周五','周六','周日'],//横坐标
      dataItem:{
        accumulatedEstimate:[74, 19, 152, 101, 77, 99, 38],//累计预计收入
        accumulatedActual:[95, 110, 82, 181, 86, 98, 139],//累计实际收入
        expectedRevenue:[177, 68, 134, 202, 24, 184, 194],// 预计收入
        accumulatedIncome:[218, 39, 159, 49, 186, 80, 204],// 累计收入
      }
    }
  },
  async mounted() {
    this.initChart()
  },
  methods: {
    initChart() {
      let myChart = echarts.init(this.$refs.demo5);
      let option = {
        title:{
          show:false
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'shadow'
          },
          // 格式化弹窗中的内容
          formatter:(params)=>{
            let dateTime = params[0].axisValue
            // 生成
            let element = params.map(item => {
              let width = '10px'
              let height = '2px'
              if (['累计收入','预计收入'].includes(item.seriesName)) {
                width = '10px'
                height = '10px'
              }
              return `<div style="padding-top: 12px;display: flex;justify-content: space-between;">
                        <div>
                          <span style="display: inline-block;width: ${width};height: ${height};background-color: ${item.color};margin-right: 8px;"></span>
                          <span>${item.seriesName}</span>
                        </div>
                        <div>
                          ${item.value}
                        </div>
                      </div>`
              }).join("");
            // 渲染
            return `
              <div style="width: 180px;height: 175px;font-size: 14px;color: #000;padding:0 10px 10px">
                <header style="margin-bottom: 4px;">
                  ${dateTime}
                </header>
                <main>
                  ${element}
                </main>
              </div>
            `
          },
          confine: true
        },
        legend: {
          top: 14,
          // right:3,
          itemHeight:10,
          itemWidth:12,
          textStyle:{
            fontSize:14,
            color:"#000"
          },
          data: [
            {name:"累计收入",icon:"path://m 0 -1 h 10 v 10 h -10z"},
            {name:"预计收入",icon:"path://m 0 -1 h 10 v 10 h -10z"},
            {name:"累计实际收入",icon:"path://m 0 -1 h 10 v 2 h -12z"},
            {name:"累计预计收入",icon:"path://m 0 -1 h 10 v 2 h -12z"}
          ]
        },
        grid: {
          left: '3%',
          right: '3%',
          bottom: '2%',
          containLabel: true
        },
        // dataZoom: [{
        //   id: 'dataZoomX',
        //   type: 'inside',
        //   // start: 0,
        //   // end: this.xAxis.length > 5 ? 10 : 100,
        //   startValue: this.xAxis.length > 5 ? 5 : 0,//数据窗口范围的起始数值(绝对数值)。如果设置了dataZoom-inside.start 则startValue失效。
        //   endValue: this.xAxis.length > 5 ? 9 : 100,
        //   zoomOnMouseWheel: false,
        //   moveOnMouseMove: true,
        //   moveOnMouseWheel: true
        // }],
        xAxis: [
          {
            type: 'category',
            splitLine:{
              show:false,
            },
            axisTick:{
              show:false,
            },
            axisLine:{
              show:false,
            },
            axisPointer: {
              type: 'shadow'
            },
            nameTextStyle:{
              color: 'rgba(0,0,0,0.6)',
              fontWeight: 400,
              fontSize: 12 
            },
            axisLabel:{
              color: 'rgba(0,0,0,0.6)',
              fontWeight: 400,
              fontSize: 12 
            },
            data:this.xAxis
          }
        ],
        yAxis: [
          {
            name: "单位(万元)",
            type: 'value',
            min: 0,
            // max: 200000,
            // interval: 40000,
            axisPointer:{
              show:false,
            },
            // y轴名字的配置项
            nameTextStyle:{
              align:'left',
              padding: [0,0,0,-25],
              color: 'rgba(0,0,0,0.6)',
              fontWeight: 400,
              fontSize: 12 
            },
            nameGap: 15,
            splitLine :{
              lineStyle:{
                  type:'solid',//虚线
                  color: 'rgba(0,0,0,0.15)',
                  width: 1,
              },
              show: true //隐藏
            }
          },
          {
            type: 'value',
            name: "累计(万元)",
            min: 0,
            // max: 100,
            // interval: 20,
            axisLabel: {
              formatter: '{value}'
            },
            splitLine:{
              show:false,
            },
            axisPointer:{
              show:false,
            },
            // y轴名字的配置项
            nameTextStyle:{
              align:'right',
              padding: [0,-25,0,0],
              color: 'rgba(0,0,0,0.6)',
              fontWeight: 400,
              fontSize: 12 
            },
            nameGap: 15,
          }
        ],
        series: (()=>{
          let series = [
             {
              name: '累计收入',
              type: 'bar',
              // 数据堆叠
              stack: 'total', 
              // 柱形图宽度
              barMaxWidth:20,
              // barGap:"50%",
              itemStyle:{
                color: '#FF7F50'
              },
              data:this.dataItem.accumulatedIncome
            },
            {
              name: '预计收入',
              type: 'bar',
              // 数据堆叠
              stack: 'total',
              // 柱形图宽度
              barMaxWidth:20,
              // barGap:"50%",
              itemStyle:{
                color: '#FFE4B5'
              },
              data:this.dataItem.expectedRevenue
            },
            {
              name: '累计实际收入',
              type: 'line',
              smooth: true, // 平滑曲线
              // stack: 'total',
              // barMaxWidth:8,
              // barGap:"50%",
              itemStyle:{
                color: '#800080',
                width: 2
              },
              // 使用双y轴的时候那些数据使用那个轴
              yAxisIndex: 1,
              data:this.dataItem.accumulatedActual
            },
            {
              name: '累计预计收入',
              type: 'line',
              smooth: true, // 平滑曲线
              // stack: 'total',
              // barMaxWidth:8,
              // barGap:"50%",
              itemStyle:{
                color:'#A0522D',
                width: 2
              },
              yAxisIndex: 1,
              data:this.dataItem.accumulatedEstimate
            },
          ]
          return series
        })()
      }
      myChart.setOption(option, true);
    },
  },

}
</script>

<style lang="scss" scoped>

</style>

效果如下

在这里插入图片描述

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

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

相关文章

linux如何重置root密码

目录 当我们想要重置root管理员密码时&#xff0c;我们可以有两种方法进行&#xff1a; 方法一、init方法 1、重启系统&#xff0c;在下图所示界面按e键 2、随后进入以下界面&#xff0c;、将ro修改为rw&#xff0c;在行末尾添加init/bin/sh。​编辑 3、随后按Ctrlx启动到s…

Java集合大总结——Iterator(迭代器)接口

Iterator接口 在程序开发中&#xff0c;经常需要遍历集合中的所有元素。针对这种需求&#xff0c;JDK专门提供了一个接口java.util.Iterator。 Iterator接口也是Java集合中的一员&#xff0c;但它与Collection、Map接口有所不同。 Collection接口与Map接口主要用于存储元素Ite…

C语言--有 n 个人围成一圈,顺序排号。 从第 1 个人开始报数,从 1 到 3 报数,凡是报到 3 的人退出圈子,问最后留下的是原来的第几号?

今天小编给大家分享以下约瑟夫环问题的处理。 一.题目描述 有 n 个人围成一圈,顺序排号。 从第 1 个人开始报数,从 1 到 3 报数,凡是报到 3 的人退出圈子,问最后留下的是原来的第几号? 这是一个典型的约瑟夫环的问题。 二.思路分析 难点一&#xff1a;我们如何表示人退出圈…

QEMU显示虚拟化的几种选项

QEMU可以通过通过命令行"-vga type"选择为客户机模拟的VGA卡的类别,可选择的类型有多个: -vga typeSelect type of VGA card to emulate. Valid values for type arecirrusCirrus Logic GD5446 Video card. All Windows versions starting from Windows 95 should …

【设计模式】设计模式基础

设计模式基础 文章目录 设计模式基础一、七大设计原则1.1 概述1.2 单一职责原则1.3 接口隔离原则1.4 依赖倒转原则1.5 里氏替换原则1.6 开闭原则1.7 迪米特法则1.8 合成复用原则 二、UML类图2.1 概述2.2 依赖关系&#xff08;Dependence&#xff09;2.3 泛化关系(generalizatio…

YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进【NO.79】改进损失函数为VariFocal Loss

前言 作为当前先进的深度学习目标检测算法YOLOv8&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列文章&#xff0c;将重点对YOLOv8的如何改进进行详细的介绍&…

Linux MMC子系统 - 5.eMMC 5.1工作模式-引导模式

By: Ailson Jack Date: 2023.11.19 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/164.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

Windows 下 Sublime Text 3.2.2 下载及配置

1 下载地址&#xff1a; https://www.sublimetext.com/3 Sublime Text 3.2.2 (此版本选择了 portable version)&#xff0c;直接解压就可以使用。 https://download.sublimetext.com/Sublime Text Build 3211.zip 2 相关配置 2.1 取消自动更新(需重启)&#xff1a; Preferen…

新手必看!!超详细!STM32-基本定时器

一、基本定时器的作用 定时触发输出直接驱动DAC。 二、基本定时器的框图 以STM32F103系列为例&#xff0c;具体开发板请查看开发手册。 类别定时器总线位数计数方向预分频系数是否可以产生DMA捕获/比较通道互补输出基本定时器TIM6 / TIM7APB116位向上1~65536可以0无通用定时…

关于MySQL安装时一直卡在starting sever......手把手教你搞定

&#x1f388;&#x1f388;&#x1f388;很多人刚开始安装MySQL的时候会出现卡在starting sever..的情况&#xff0c;今天手把手教大家轻松搞定&#xff01; 首先出现这个问题的原因有两个&#xff1a; 1. 你的电脑用户名是中文的。 2. 你前一次安装的MySQL没有完全删除干净。…

Halcon (3):窗体常用语法使用

文章目录 文章专栏视频资源前言halcon图像使用加载图片示例绘制常用图像批量批注绘制 文章专栏 Halcon开发 视频资源 机器视觉之C#联合Halcon 前言 在使用halcon的算子之前&#xff0c;我们要先学会如何在图片上面进行标注。因为我们不仅要导出处理的结果&#xff0c;还要导出…

Vue3问题:如何实现el-tree树的单选?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约1400字&#xff0c;整篇阅读大约需要3分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

springboot+activiti5.22.0集成Activiti在线流程设计器

SpringBoot集成Activiti5.22在线流程设计器 文章目录 SpringBoot集成Activiti5.22在线流程设计器&#x1f4dd;1.增加配置pom依赖 增加数据库及redis配置文件&#x1f4dc; 2.启动类ActivitiDesignApplication排除安全校验注解启动项目后将会自动在数据库中生成表 &#x1f4d8…

MySQL 的执行原理(二)

5.3. MySQL 的查询成本 5.3. MySQL 的查询成本 MySQL 执行一个查询可以有不同的执行方案&#xff0c;它会选择其中成本最低&#xff0c;或者 说代价最低的那种方案去真正的执行查询。不过我们之前对成本的描述是非常模 糊的&#xff0c;其实在 MySQL 中一条查询语句的执行成本…

游戏数据分析必知必会

游戏的分类 按端分类&#xff1a;端游&#xff08;steam&#xff09;&#xff0c;页游&#xff08;4399&#xff09;&#xff0c;手游&#xff08;手机&#xff0c;pad&#xff09;按盈利模式分类&#xff1a;付费游戏&#xff08;一次买断&#xff0c;后续购买其它剧情或者包…

使用内网穿透解决支付宝回调地址在公网问题

使用natapp解决内网穿透问题 前言NATAPP使用购买隧道 支付宝回调地址测试之后的学习计划 前言 最近一个项目用到了支付宝&#xff0c;但是本地调试的时候发现支付宝的回调地址需要在公网上能够访问到。为了更加方便地调试&#xff0c;就使用了natapp内网穿透&#xff0c;将回调…

FPGA语法相关知识合集

一.相关概念 1.四种结构说明语句 2.initial 与 always 的异同点 3.task 与 function 的3个不同点 4.task的语法结构(定义及调用) 5.function的语法结构(定义及调用) 6.function 的一个必须有和一个必须没有&#xff0c;使用规则 7.自动&#xff08;递归&#xff09;函数…

Win11+Modelsim SE-64 10.6d搭建UVM环境

1、添加源文件及tb文件 在目录下建立文件夹&#xff0c;将DUT和Testbench添加进去&#xff0c;文件夹内容如下所示&#xff1a; 2、以《UVM实战》中的例子做简单的示例&#xff1a; 2.1 设计文件 &#xff1a;dut.sv 功能很简单&#xff0c;即将接受到的数据原封不动发送出去…

指针与多维数组练习

例题一&#xff1a; 矩阵相乘 首先&#xff0c;如果你没学过线代的话&#xff0c;这边建议你去B站把宋浩的矩阵运算学了再来看题 如果有个矩阵A和一个矩阵B&#xff0c;当A的列数和B的行数相同时&#xff0c;生成一个新矩阵C&#xff0c;且C是通过矩阵乘法得来的 A[3][2]{3…

画中画视频剪辑:批量制作画中画视频,让视频更具吸引力和创意

在今天的视频制作环境中&#xff0c;画中画视频剪辑技术已经成为了一种主流。它不仅能增加视频的视觉吸引力&#xff0c;也可以提升观看体验。画中画视频剪辑是一种制作多个视频画面的技术&#xff0c;它可以将两个或更多的视频画面融合在一起&#xff0c;形成一个全新的视频。…