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

news2025/1/10 11:50:40

一、象形柱图

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>

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

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

相关文章

论文浅尝 | KRACL-利用图上下文和对比学习的稀疏KG补全

笔记整理&#xff1a;李娟&#xff0c;浙江大学博士&#xff0c;研究方向为知识图谱表示学习 论文链接&#xff1a;https://arxiv.org/pdf/2208.07622.pdf 代码链接&#xff1a;https://github.com/TamSiuhin/KRACL 介绍 知识图谱&#xff08;KG&#xff09;通常是不完整的&…

注意力机制——SENet原理详解及源码解析

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

【ROS】话题通信--从理论介绍到模型实现(C++)

1.简单介绍 话题通信是ROS中使用频率最高的一种通信模式&#xff0c;话题通信是基于发布订阅模式的&#xff0c;也即:一个节点发布消息&#xff0c;另一个节点订阅该消息。像雷达、摄像头、GPS… 等等一些传感器数据的采集&#xff0c;也都是使用了话题通信&#xff0c;换言之…

windows 配置 Kerberos客户端访问CDH组件

0.背景 想在window机器上访问内网集群的CDH组件(如solr的webui),由于集群配置了Kerberos验证,所以需要配置相关,否则打开webui会有401未授权错误 1. 流程 1.1 windows安装Kerberos客户端 -下载 Windows系统客户端去下面网站按需下载 http://web.mit.edu/kerberos/dist/ 需要…

【力扣】496. 下一个更大元素 I <单调栈、模拟>

【力扣】496. 下一个更大元素 I nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。给你两个没有重复元素的数组 nums1 和 nums2 &#xff0c;下标从 0 开始计数&#xff0c;其中nums1 是 nums2 的子集。   对于每个 0 < i <…

喜报 | 擎创再度入围IDC中国FinTech 50榜单

8月16日&#xff0c;2023年度“IDC中国FinTech 50”榜单正式揭晓&#xff0c;擎创科技继2022年入选该榜单后&#xff0c;再次以创新者姿态成功入选&#xff0c;并以技术赋能业务创新&#xff0c;成为中国金融科技领域创新与活力的重要贡献者。 “IDC中国FinTech 50”旨在评选出…

RabbitMq交换机类型介绍

RabbitMq交换机类型介绍 在RabbitMq中&#xff0c;生产者的消息都是通过交换器来接收&#xff0c;然后再从交换器分发到不同的队列&#xff0c;再由消费者从队列获取消息。这种模式也被成为“发布/订阅”。 分发的过程中交换器类型会影响分发的逻辑。 直连交换机&#xff1a…

高校大学生社团管理系统的设计与实现(论文+源码)_kaic

目 录 一、绪论 &#xff08;一&#xff09;选题背景 1、社团管理系统的提出 &#xff08;二&#xff09;系统设计的原则与目标 1、系统设计原则 2、系统设计目标 二、系统关键技术的分析 &#xff08;一&#xff09;JSP技术 &#xff08;二&#xff09;Tomcat简介 1、SERVL…

虚拟机远程连接出现 Connection refused: connect问题(已解决)

如果你也跟我一样出现了这样的问题&#xff0c;并且网上的方法试了都不行&#xff0c;不妨试试我的简单粗暴的方法&#xff0c; 那就是拔网线&#xff0c;我的就是拔网线&#xff0c;重新连接就行了&#xff0c;佛了

Creating a document in Overleaf

1、Uploading a project上传项目 This artcle provides a step-by-step guide showing how to create an Overleaf project by uploading a .zip file containing LaTeX files stored on your local computer 1、Create a .zip file containing your local files (images, bib…

如何优雅的进行接口设计?接口设计的六大原则是什么?

如何优雅的进行接口设计&#xff1f;接口设计的六大原则是什么&#xff1f; 本文关于如何优雅的进行接口设计&#xff1f;接口设计的六大原则是什么&#xff1f; 作为后端开发&#xff0c;不管是什么语言&#xff0c;Java、Go还是C&#xff0c;其背后的后端思想都是类似的。后…

JAVA免杀学习与实验

1 认识Webshell 创建一个JSP文件&#xff1a; <% page import"java.io.InputStream" %> <% page import"java.io.BufferedReader" %> <% page import"java.io.InputStreamReader" %> <% page language"java" p…

【linux基础(四)】对Linux权限的理解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到开通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux权限 1. 前言2. shell命…

Linux 进程间通信——共享内存

一、共享内存原理 共享内存为多个进程之间共享和传递数据提供了一种有效的方式。共享内存是先在物理内存上申请一块空间&#xff0c;多个进程可以将其映射到自己的虚拟地址空间中。所有进程都可以访问共享内存中的地址&#xff0c;就好像它们是由malloc分配的一样。如果某个进…

实现一个自动保存高CPU占用现场的简易工具

CPU 使用率在系统监控中是一个非常重要的指标。对于大多数 Web 应用来说&#xff0c;它们往往是 IO 密集型的&#xff0c;因此只会在某些时刻可能会出现 CPU 突然飙升的情况&#xff0c;随后很快就恢复正常。然而&#xff0c;当收到报警并想要排查问题时&#xff0c;CPU 飙升的…

Windows10上VS2022单步调试FFmpeg 4.2源码

之前在 https://blog.csdn.net/fengbingchun/article/details/103735560 介绍过通过VS2017单步调试FFmpeg源码的方法&#xff0c;这里在Windows10上通过VS2022单步调试FFmpeg 4.2的方法&#xff1a;基于GitHub上ShiftMediaProject/FFmpeg项目&#xff0c;下面对编译过程进行说明…

VS2022远程Linux使用cmake开发c++工程配置方法

文章目录 远程连接CMakePresets.json的配置Task.vs.json配置launch.vs.json配置最近使用别人在VS2015上使用visualgdb搭建的linux开发环境,各种不顺手,一会代码不能调转了,一会行号没了,调试的时候断不到正确的位置,取消的断点仍然会进。因此重新摸索了一套使用vs的远程开…

合并多个文本文件

使用 wxPython 模块合并多个文本文件的博客。以下是一篇示例博客&#xff1a; C:\pythoncode\blog\txtmerge.py 在 Python 编程中&#xff0c;我们经常需要处理文本文件。有时候&#xff0c;我们可能需要将多个文本文件合并成一个文件&#xff0c;以便进行进一步的处理或分析。…

MySQL的配置文件my.cnf与my.ini

一、my.cnf与my.ini win系统&#xff0c;MySQL配置文件为my.ini 其他系统&#xff08;Ubuntu、CentOS、macOS)MySQL配置文件为my.cnf 二、my.cnf与my.ini的路径 2.1 默认路径 MySQL 的配置文件 my.cnf 可能位于多个位置&#xff0c;具体取决于安装方式和操作系统。以下是一…