Echarts:象形柱图实现水塔水位的动画、水球图和液位柱子图

2023-11-07

一、象形柱图

1、vue中使用象形柱图

效果图:

2、代码实现

<template>
    <div :class="className" :style="{height:height,width:width}"/>
  </template>
<script>

import echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme
export default {
props: {
className: {
type: String,
    default: 'chart'
},
width: {
type: String,
default: '30%'
},
height: {
type: String,
default: '300px'
},
border: {
type: String,
default: '1px solid red'
},
optionTest:{}
},

data() {
    return {
        myChart: null,
        option: undefined
    }
},
mounted() {
    this.init()
},
methods: {
    //初始化构建
    init() {
            //设备高度;
        var towerHight = 3;
        var timerKpi;
        var level = parseFloat(Math.random() * 3 + 0.1).toFixed(2);
        if (level >= 3) {
            level = 2.99;
        }
        var dataList = parseFloat(level * 100 / towerHight).toFixed(2);
        //渲染图表;
        this.makeBar(dataList, level, this.getBgColor(level), "charts");
        clearInterval(timerKpi);
        const _this = this;
        setInterval(function () {
            var level = parseFloat(Math.random() * 3 + 0.1).toFixed(2);
            if (level >= 3) {
                level = 2.99;
            }
            var dataList = parseFloat(level * 100 / towerHight).toFixed(2);
            //渲染图表;
            _this.makeBar(dataList, level, _this.getBgColor(level), "charts");
        }, 3000);
    },
    // 基于准备好的dom,初始化echarts实例;
    makeBar(dataList, level, colorList, id) {
        this.myChart = echarts.init(this.$el, 'macarons')
        this.option = {
            tooltip: {
                trigger: 'none'
            },
            xAxis: {
                data: [''],
                axisTick: {
                    show: false
                },
                axisLine: {
                    show: false
                },
                axisLabel: {
                    show: false
                }
            },
            yAxis: {
                splitLine: {
                    show: false
                },
                axisTick: {
                    show: false
                },
                axisLine: {
                    show: false
                },
                axisLabel: {
                    show: false
                }
            },
            series: [{
                name: '最上层立体圆',
                type: 'pictorialBar',
                animation: false,
                symbolSize: [300, 45],
                symbolOffset: [0, -20],
                z: 12,
                itemStyle: {
                    normal: {
                        color: '#363F5E'
                    }
                },
                data: [{
                    value: 100,
                    symbolPosition: 'end'
                }]
            }, {
                name: '中间立体圆',
                animation: false,
                type: 'pictorialBar',
                symbolSize: [300, 45],
                symbolOffset: [0, -20],
                z: 12,
                itemStyle: {
                    normal: {
                        color: colorList
                    }
                },
                data: [{
                    value: dataList,
                    symbolPosition: 'end'
                }]
            }, {
                name: '最底部立体圆',
                animation: false,
                type: 'pictorialBar',
                symbolSize: [300, 45],
                symbolOffset: [0, 20],
                z: 12,
                itemStyle: {
                    normal: {
                        color: colorList
                    }
                },
                data: [100 - dataList]
            }, {
                //底部立体柱
                stack: '1',
                animation: false,
                type: 'bar',
                itemStyle: {
                    normal: {
                        color: colorList,
                        opacity: .7
                    }
                },
                label: {
                    show: true,
                    position: 'inside',
                    color: "#FFFE00",
                    fontSize: 50,
                    formatter: function () {
                        return level + " 米";
                    }
                },
                silent: true,
                barWidth: 300,
                barGap: '-100%', // Make series be overlap
                data: [dataList]
            }, {
                //上部立体柱
                stack: '1',
                type: 'bar',
                animation: false,
                itemStyle: {
                    normal: {
                        color: '#36405E',
                        opacity: .7
                    }
                },
                silent: true,
                barWidth: 300,
                barGap: '-100%', // Make series be overlap
                data: [100 - dataList]
            }]
        };

        this.myChart.setOption(this.option);
        window.addEventListener("resize", function () {
            this.myChart.resize();
        });
    },
    //获取背景色;
    getBgColor(num) {
        var min = '1', max = '2';
        if (num > max) {
            return '#DB2F2C'
        }

        if (num >= min && num <= max) {
            return '#438a7a'
        }

        if (num < min) {
            return '#3EC6F0'
        }
    }
}
}
</script>

<style>

.chart{
    background-size: 60% 60%;
    /* background:rgba(34,34,34,0.5); */
}


</style>

二、水球图

1、vue中使用水球图

效果:

 2、代码实现

1)依赖下载

npm install echarts@4.9.0 --save
npm install echarts-liquidfill@2.0.6 --save

2)源码

<template>
    <div class='wrapper'>
        <div class="inner">
            <div class='chart' id='chart'></div>
            <div class="btm"></div>
        </div>
    </div>
</template>
  
  <script>
    import 'echarts-liquidfill'    
    import * as echarts from 'echarts'
    require('echarts/theme/macarons') // echarts theme
    export default {
        props: {
            className: {
            type: String,
                default: 'chart'
            },
            width: {
            type: String,
            default: '300px'
            },
            height: {
            type: String,
            default: '300px'
            },
            optionTest:{}
        },
        data () {
            return {}
        },
        mounted () {
        this.drawChart()
        },
        methods: {
        drawChart () {
            // 基于准备好的dom,初始化echarts实例
            // let chart = echarts.init(this.$el, 'macarons')
            let chart = echarts.init(document.getElementById('chart'))
            // 监听屏幕变化自动缩放图表
            window.addEventListener('resize', function () {
            chart.resize()
            })
            // 绘制图表
            chart.setOption({
            // 图表主标题
            title: {
                text: '全国就业率', // 主标题文本,支持使用 \n 换行
                top: 20, // 定位 值: 'top', 'middle', 'bottom' 也可以是具体的值或者百分比
                left: 'center', // 值: 'left', 'center', 'right' 同上
                textStyle: { // 文本样式
                fontSize: 30,
                fontWeight: 600,
                color: 'black'
                }
            },
            // 提示框组件
            tooltip: {
                trigger: 'item', // 触发类型, 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
                textStyle: {
                color: '#fff' // 文字颜色
                },
                // 提示框浮层内容格式器,支持字符串模板和回调函数两种形式
                // 水球图: {a}(系列名称),{b}(无),{c}(数值)
                // 使用函数模板   传入的数据值 -> value: number|Array,
                formatter: function (value) {
                return value.seriesName + ': ' + value.data * 100 + '%'
                }
            },
            series: [{
                type: 'liquidFill',
                name: '全国就业率', // 系列名称,用于tooltip的显示,legend 的图例筛选
                radius: '62%', // 水球图的半径
                center: ['50%', '60%'], // 水球图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
                // 水填充图的形状 circle 默认圆形  rect 圆角矩形  triangle 三角形  
                // diamond 菱形  pin 水滴状 arrow 箭头状  还可以是svg的path
                shape: 'circle',
                phase: 0, // 波的相位弧度 不设置  默认自动
                direction: 'right', // 波浪移动的速度  两个参数  left 从右往左 right 从左往右
                outline: {
                show: true,
                borderDistance: 0, // 边框线与图表的距离 数字
                itemStyle: {
                    opacity: 1, // 边框的透明度   默认为 1
                    borderWidth: 1, // 边框的宽度
                    shadowBlur: 1, // 边框的阴影范围 一旦设置了内外都有阴影
                    shadowColor: '#fff', // 边框的阴影颜色,
                    borderColor: '#41dcd8' // 边框颜色
                }
                },
                // 图形样式
                itemStyle: {
                color: '#4077eb', // 水球显示的背景颜色
                opacity: 0.5, // 波浪的透明度
                shadowBlur: 10 // 波浪的阴影范围
                },
                backgroundStyle: {
                color: '#407bf3', // 水球未到的背景颜色
                opacity: 0.5
                },
                // 图形的高亮样式
                emphasis: {
                itemStyle: {
                    opacity: 0.8 // 鼠标经过波浪颜色的透明度
                }
                },
                // 图形上的文本标签
                label: {
                fontSize: 55,
                fontWeight: 400,
                color: '#fff'
                },
                data: [0.62] // 系列中的数据内容数组
            }]
            })
        }
        }
    }
  </script>
  
  <style scoped>
    .wrapper {
        width: 100%;
    }
    .wrapper .inner {
        position: relative;
        width: 50%;
        height: 500px;
        border: 1px solid #eeeeee;
        margin: 100px 50px 0;
        background: url(../../../assets/images/bg.png) no-repeat;
        background-size: 100% 100%;
    }
    .wrapper .inner .chart {
        width: 400px;
        height: 400px;
        background: url(../../../assets/images/fill-border.gif) no-repeat center bottom;
        background-size: 80% 80%;
        margin: 10px auto 0;
    }
    .wrapper .inner .btm {
        width: 320px;
        height: 25px;
        background: url(../../../assets/images/icon-bot.png) no-repeat;
        background-size: 100% 100%;
        margin: 0 auto;
    }
  </style>
  

三、液位柱子图

1、vue中使用液位柱子图

效果:

 2、代码实现

<template>
    <div class='chart' id='chart'></div>
</template>

<script>
    import 'echarts-liquidfill'
    import * as echarts from 'echarts'
    require('echarts/theme/macarons') // echarts theme
    export default {
        data() {
            return {
                maxData: 100,
                value: 50
            }
        },
        mounted() {
            this.drawChart()
        },
        methods: {
            drawChart() {
                // 基于准备好的dom,初始化echarts实例
                // let chart = echarts.init(this.$el, 'macarons')
                let chart = echarts.init(document.getElementById('chart'))
                // 监听屏幕变化自动缩放图表
                window.addEventListener('resize', function () {
                    chart.resize()
                })
                // 绘制图表
                chart.setOption({
                    xAxis: {
                        show: false,
                        data: [0],
                    },
                    yAxis: {
                        max: this.maxData,
                        type: 'value',
                        show: false,
                    },
                    grid: {
                        top: '15',
                        bottom: '-5',
                        right: '0',
                        left: '-30',
                        containLabel: true,
                    },
                    series: [
                        {
                            // 柱子
                            type: 'bar',
                            barWidth: 60,
                            showBackground: true,
                            // label: {
                            //   show: true,
                            //   formatter: '{c}%',
                            //   color: 'white',
                            //   align: 'center',
                            //   verticalAlign: 'middle',
                            // },
                            backgroundStyle: {
                                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                                    { offset: 0, color: 'rgb(46 178 255)' },
                                    { offset: 1, color: 'white' },
                                ]),
                            },
                            itemStyle: {
                                color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [
                                    { offset: 0, color: '#0095ff' },
                                    { offset: 0.5, color: '#04e6fd' },
                                    { offset: 1, color: '#0095ff' },
                                ]),
                            },
                            data: [this.value],
                            z: 1,
                        },
                        {
                            type: 'scatter',
                            data: [this.value > 100 ? 100 : this.value],
                            symbolSize: [60, 16],
                            label: {
                                show: true,
                                color: 'white',
                                formatter: `${this.value}%`,
                                offset: [0, 1]
                            },
                            itemStyle: {
                                color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
                                    { offset: 0, color: '#0095ff' },
                                    { offset: 1, color: '#48fcff' },
                                ]),
                            },
                            cursor: 'auto',
                            emphasis: {
                                disabled: true,
                            },
                            z: 11
                        },
                        {
                            // 顶盖
                            type: 'pictorialBar',
                            animationDuration: 0,
                            barWidth: '60',
                            symbolSize: ['100%', 16],
                            symbolRepeat: false,
                            symbolMargin: '0',
                            symbolPosition: 'end',
                            symbolOffset: [0, -8],
                            symbolBoundingData: this.maxData,
                            legendHoverLink: false,
                            itemStyle: {
                                color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
                                    { offset: 0, color: '#0059a5' },
                                    { offset: 1, color: '#0095ff' },
                                ]),
                            },
                            cursor: 'auto',
                            emphasis: {
                                disabled: true,
                            },
                            data: [0],
                            z: 10,
                        },
                        {
                            // 底座
                            type: 'pictorialBar',
                            animationDuration: 0,
                            barWidth: '60',
                            symbolRepeat: false,
                            symbolMargin: '0',
                            symbolPosition: 'start',
                            symbolOffset: [0, 8],
                            symbolSize: ['100%', 16],
                            symbolBoundingData: this.maxData,
                            legendHoverLink: false,
                            emphasis: {
                                disabled: true,
                            },
                            itemStyle: {
                                color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
                                    { offset: 0, color: '#0095ff' },
                                    { offset: 1, color: '#48fcff' },
                                ]),
                            },
                            data: [0],
                            z: 10,
                        },
                    ],
                })
            }
        }
    }
</script>

<style scoped>
    .chart {
        width: 400px;
        height: 400px;
    }
</style>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Echarts:象形柱图实现水塔水位的动画、水球图和液位柱子图 的相关文章

  • 获取画布上下文的最后一个点的坐标

    我想创建一个arrowTo功能与CanvasRenderingContext2D prototype 为此 我需要获取最后一个点的坐标 例如 var ctx someCanvas getContext 2d ctx moveTo 10 40
  • 在生产中使用 babel-node 可以吗

    我一直在使用 babel node 和 browserify 以及 babelify 转换来开发一个网站 以支持 ES6 语法 我只是想知道 我可以在生产中运行它吗 babel node server 而不是 node server 要在
  • 如何将 div (或任何元素)覆盖在表格行 (tr) 上?

    我想在恰好有多个列的表行 tr 标记 上覆盖一个 div 或任何可以使用的元素 我尝试了几种方法 似乎都不起作用 我在下面发布了我当前的代码 我确实得到了一个覆盖 但不是直接覆盖在该行上 我尝试将覆盖顶部设置为 div Bottom css
  • 优化数据可视化 Web 应用程序的性能

    我正在重写 3 年前编写的数据可视化网络工具 从那时起 浏览器的 JavaScript 引擎变得更快 所以我正在考虑将部分工作从服务器转移到客户端 在页面上 数据在表格和地图 或图表 中可视化 它使用相同的数据 但以不同的方式 因此准备显示
  • 1分30秒倒计时器javascript

    我有代码 但它适用于 2 分钟计时器 我需要将其修改为 1 分 30 秒计时器 我已经尝试过 但未能从 1 30 开始计时器 因为我是这一行的初学者 并且想学习如何做到这一点 这是代码 div div
  • jQuery - 提高处理 XML 时的选择器性能

    我正在处理一个 XML 文件 当使用 XPath 样式选择器选择节点时 该文件的性能非常慢 这是运行特别慢的部分代码 for i 0 i
  • 是否可以将自定义 HTML 添加到传单图层组和图层控件

    有什么方法可以将自定义 HTML 注入图层组和图层控件中吗 在我们的应用程序中 我们实现了滑块 输入 范围 来调整不透明度设置 并且很明显 在其控制容器内部的基础层上使用专用滑块是有意义的 没有选项或参数可以修改此控件 理想情况下 我们希望
  • Amcharts 图表 - 图表列到自定义 URL 的超链接以在新选项卡/窗口中打开

    我正在尝试制作一个 amcharts 图表 其中的列链接到自定义网址 并希望网址在新选项卡 窗口中打开 我尝试将此代码添加到图形对象中 但它不起作用 它在同一选项卡 窗口中打开链接 listeners event clickItem met
  • 变量前面加双下划线

    我的节点代码中有以下代码片段 var fs require fs fs readdir dirname function err files console log files 为什么变量 dirname 有双下划线 我知道一个下划线是私有
  • 语法:const {} = 变量名,任何人都可以解释或指出我正确的方向[重复]

    这个问题在这里已经有答案了 这个语法在 JavaScript 中意味着什么 可能是 ES6 const 变量名 我目前正在尝试掌握 React 在很多例子中我都遇到过这种语法 例如 const girls guys women men st
  • Famo.us 滚动视图高度

    我正在尝试使用著名的顺序布局在滚动视图下方添加图像 但滚动视图的高度有问题 这就是我创建滚动视图的方式 var scrollview new Scrollview direction Utility Direction X options
  • 属性访问器(getter)的扩展运算符问题

    我很难理解为什么以下代码存在一些问题https jsfiddle net q4w6e3n3 3 https jsfiddle net q4w6e3n3 3 Note 所有示例均在 chrome 版本 52 0 2743 116 中进行测试
  • 如何正确删除动画集中引用的 Raphael SVG 元素?

    我有一组动画 Raphael SVG 元素 我正在通过用户发起的 ajax 调用添加新元素并删除旧元素 我 set push 新元素 但因为我需要删除的元素通常不是集合中的最后一个元素 所以我使用 element remove 而不是 se
  • 我可以在不使用 Jquery UI 的情况下获得 Jquery Pulsate Effect 吗?

    我遇到了由于某种原因无法使用 Jquery UI 的情况 我正在尝试在不使用 Jquery UI 的情况下获得 Jquery UI 脉冲效果 与此链接类似 http docs jquery com UI Effects Pulsate ht
  • 表单序列化javascript(无框架)

    想知道 javascript 中是否有一个没有 jquery 或任何框架的函数可以让我序列化表单并访问序列化版本 2023 年更新 Use FormData https developer mozilla org en US docs We
  • 如何上传文件 - sails.js

    我可以下载图像和 pdf 但无法下载文档文件 doc pptx odt 下载文档 doc pptx odt 时 仅将其下载为 ZIP XML 文件 我可以做什么 我在用着 填写上传文件文档 https github com balderda
  • Google 地图 InfoBubble PixelOffset(从标记上方的默认位置移动)

    我正在尝试实现一个自定义 infoBubble 它的框打开到标记的侧面 而不是顶部的默认位置 事实证明这比预期的要困难 使用普通的infoWindow 您可以使用pixelOffset 请参阅此处文档 https developers go
  • 从未使用 mimeType 初始化的 MediaRecorder 获取 mimeType

    我正在使用 MediaRecorder API 在页面上录制一些媒体 在我的 MediaRecorder 初始化中 我没有指定内容类型 因为我不需要任何特别的内容 浏览器可以选择它想要的 var mediaRecorder new Medi
  • window.open 使用 css 样式

    我想设计我的 window open 目前 我的网页上有一些项目由于解析了某个类而打开 然后在新窗口中打开指定的文本 我想更改字体大小 字体和填充等 这是我的 JavaScript 代码
  • 将 Angular Web 组件 EventEmitter 监听到 javascript

    我在以下工具的帮助下创建了一个小型网络组件本文 https medium com IMM9O web components with angular d0205c9db08f使用角度元素 其中包括 Input and Output 我能够将

随机推荐

  • java基础

    1 1 关键字与保留字 关键字 keyword 的定义和特点 gt 定义 被Java语言赋予了特殊含义 用做专门用途的字符串 单词 gt 特点 关键字中所有字母都为小写 gt 官方地址 https docs oracle com javas
  • .NET Core中使用Redis和Memcached的序列化问题

    为什么get set不直接操作对象 而需要序列化 是因为可以提高对数据库操作的执行效率 学习网址https www cnblogs com catcher1994 p 8543711 html
  • Rider 使用

    下载地址 http www jetbrains com rider fromMenu 破解 https www iteblog com archives 1542 html http idea iteblog com key php 使用
  • 约瑟夫环问题(单循环链表实现)

    用单循环链表解决约瑟夫环问题 大致思路 1 利用尾插法建立一个循环链表 建表成功后删除头结点 2 核心算法 生成一个work指针 每走到约定的step 1的位置时停止 利用pdel指针标记后继结点 循环释放pdel 直到work work
  • java数组(二)

    数组 Arrays 数组是一种数据结构 它是一组相同类型的元素的集合 该集合中的每个元素都通过一个索引访问 在Java中 数组是一个对象 它可以存储在堆上或栈上 具体取决于它如何创建 数组可以是单维数组或多维数组 数组是一个固定长度的数据结
  • C++(基础入门笔记)

    1搭建环境 include
  • TCP/IP/UDP/RTP/RTCP协议

    IP 指定目的地址和源地址 Version 版本号 四个字节 IHL IP Header Length IP头长度 Total Length 总的长度 总的长度减去IP头长度 数据长度 Identification Flags Fragme
  • linux OSI七层模型、TCP/IP协议栈及每层结构大揭秘

    学习Linux 就算是像小编我这样的小萌新 也知道OSI模型 什么 你不知道 好吧 这篇秘籍拿走 不谢 一 两个协议 1 OSI 协议模型 7层 国际协议 PDU 协议数据单元对等层次之间传递的数据单位 OSI协议 7层 国际协议 PDU
  • 伺服控制-canopen

    通迅中断参数设 1 中断 停止 伺服驱动 电机停转 开启抱死动作 1 配置 opration 2 设置 3速度模式 3 设置 伺服松轴 4 设置 伺服使能 运行 1 使能 true 2 启用 true 停止 1 使能 false 2 松轴
  • Linux下安装Nginx服务并设置开机自启动

    目录 一 安装Nginx 二 开机自启动服务配置 一 安装Nginx 系统平台 CentOS Linux release 7 9 2009 Core 64位 Nginx安装版本 liunx 64位 nginx 1 20 2 tar gz 安
  • VSCode进行Lua调试

    1 安装EmmyLua 2 添加配置 3 开始调试 要选择要调试的进程就可以了
  • Docker中快速搭建SFTP

    1 拉docker镜像 docker pull atmoz sftp 2 初始化 创建容器 docker run name internalsftp p 22 22 d atmoz sftp anonymous hello123 opt U
  • 震惊~Signal <XXX> missing in the sensitivity list is added for synthesis purposes在verilog中警告的解决方法

    你是否还在为秃头而烦恼 你是否还在通宵为了赶项目而焦急 朋友 你不是 一个人 看看吧 下面是这个bug的描述 WARNING HDLCompiler 91 F FPGA Doc AD test uart v Line 56 Signal
  • java通过JDBC连接mysql8.0数据库,并对数据库中的表进行增删改查操作

    目录 一 JDBC简介 二 添加依赖 三 JDBC操作数据库的步骤 四 JDBC操作数据库 增删改查 一 新增数据 二 删除数据 三 修改数据 四 查询数据 五 多表连接查询 一 JDBC简介 Java数据库连接 Java Database
  • vue-cli配置sass,使用全局sass变量

    vue cli创建vue2 0项目 安装sass步骤 创建vue2 0项目 vue init webpack 项目名 安装sass步骤 npm install node sass 4 14 1 npm install sass loader
  • JMP、Hook

    include stdio h include tchar h include windows h offset 目标地址 jmp指令起始地址 5 跳转指令解码 0xe9 offset offset 有符号整型 四字节 它等于jmp指令的下
  • 微信小程序——仿盒马鲜生APP

    前段时间 随着马化腾现身全国多地用微信小程序乘坐公交的新闻出现 微信小程序的热度可谓是更上了一层 微信小程序现身至今 因其不用下载就可使用的方便等优点 发展趋势一直良好 盒马鲜生的问世也是充满了热度 实现了快速配送 可谓是阿里巴巴对线下超市
  • 科幻风的卡片视频播放

    上一篇博文展示了卡片中的VR展示 那篇主要是卡片的3D转动来展示未显示的部分图片 这篇 我们来点科幻的 我们在卡片中播放视频的同时来拖动卡片或转动它 像下面那样 这个主要依赖了两个库 具体代码如下
  • 浅谈js宏观任务、微观任务

    js运行机制分为同步异步 异步又分为宏观事件和微观事件 同步异步 js是一门单线程语言 因此js在同一个时间里只能做一件事 单线程意味着 如果在同个时间有多个任务的话 这些任务就需要排队 前一个执行完成才能执行下一个任务 同步任务 同步任务
  • Echarts:象形柱图实现水塔水位的动画、水球图和液位柱子图

    一 象形柱图 1 vue中使用象形柱图 效果图 2 代码实现