vue echarts饼图环形 (随着legend动态显示数据总数)

news2024/11/18 21:43:07

目录

1.安装echarts

2.引入echarts

3.创建要放入echarts实例的一个盒子

 4.创建echarts实例

5.随着legend动态显示数据总数


效果视频

1.安装echarts

npm install echarts --save

2.引入echarts

在 当前vue文件中引入 echarts 

如下图所示:

3.创建要放入echarts实例的一个盒子

切记:必须给echarts实例盒子宽高

如下图所示:

 

 4.创建echarts实例

这里就此案例对echarts环形图进行了简单的设置和讲解

<template>
    <div id="main">

    </div>
</template>

<script>
import * as echarts from 'echarts'
export default {
    data() {
        return {
            echartsSumnum: 0,//数据总数
            option: {
                // 设置标题
                title: {
                    text: '',//主标题 (主标题里面来动态显示当前数据总数)
                    subtext: '总数',//副标题
                    x: 'center',//标题x轴居中(也可以是: left || center || right || 百分比:xx% || xx(默认单位px)  )
                    y: 'center',//标题y轴居中(也可以是: top || center || bottom || 百分比:xx% || xx(默认单位px)  )
                    itemGap: -5,//主标题和副标题之间的距离(默认为 0)
                    textStyle: {//设置主标题样式
                        fontSize: 40,
                        color: '#666',
                        backroung: 'blue'
                    },
                    subtextStyle: {//设置副标题样式
                        fontSize: 20,
                        color: "#666"
                    }
                },

                // 鼠标滑过显示悬浮框
                tooltip: {
                    // show:true,//鼠标滑过是否显示悬浮框 (默认为true开启 false为关闭)

                    //设置悬浮框内展示的内容
                    // a:series.name  b:series.data.name  c:series.data.value  d:当前数据所占数据的百分比
                    formatter: '{a}</br>{b}: {c} </br>所占比例: {d}%',
                },

                // 设置图例
                legend: {
                    orient: 'vertical',//图例的排列方式 (默认 horizontal:水平方向排列 vertical:垂直方向排列)
                    right: 'right',//图标在前文字在后,图例靠右居中显示 (也可以是: left || center || right || 百分比:xx% || xx(默认单位px)  )
                    y: 'center',//图例y轴居中(也可以是: top || center || bottom || 百分比:xx% || xx(默认单位px)  )
                    itemStyle: {},//设置图例前面的图标样式
                    textStyle: {//设置图例文字样式
                        fontSize: 14
                    }
                },
                // 设置主体
                series: [
                    {
                        name: 'hello world', //echarts图名字
                        type: 'pie',//echarts 类型
                        minAngle: 5,//echarts数据value为0时默认为value为5
                        radius: ['30%', '40%'],//设置环形图 ( radius: ['设置内圆大小', '设置外圆大小']  不折设置默认为实心圆饼图)
                        center: ['50%', '50%'],//设置饼图位置 (center:['x轴位置','y轴位置']不设置默认在中间)
                        data: [ //echarts数据
                            { value: 80, name: 'ONE' },
                            { value: 50, name: 'TWO' },
                            { value: 120, name: 'THREE' },
                            { value: 210, name: 'FOUR' },
                            { value: 0, name: 'FIVE' }
                        ],
                    },

                ]
            }
        }
    },
    mounted() {
        // 初始化数据的总数
        this.option.series[0].data.forEach(v => {
            this.echartsSumnum += v.value
        })
        this.option.title.text = this.echartsSumnum

        var chartDom = document.getElementById('main');
        var myChart = echarts.init(chartDom);
        myChart.setOption(this.option);

    }
}
</script>

<style scoped lang="less">
#main {
    width: 800px;
    height: 500px;
}
</style>

5.随着legend动态显示数据总数

下面所示代码为全部代码

<template>
    <div id="main">

    </div>
</template>

<script>
import * as echarts from 'echarts'
export default {
    data() {
        return {
            echartsSumnum: 0,//数据总数
            option: {
                // 设置标题
                title: {
                    text: '',//主标题 (主标题里面来动态显示当前数据总数)
                    subtext: '总数',//副标题
                    x: 'center',//标题x轴居中(也可以是: left || center || right || 百分比:xx% || xx(默认单位px)  )
                    y: 'center',//标题y轴居中(也可以是: top || center || bottom || 百分比:xx% || xx(默认单位px)  )
                    itemGap: -5,//主标题和副标题之间的距离(默认为 0)
                    textStyle: {//设置主标题样式
                        fontSize: 40,
                        color: '#666',
                        backroung: 'blue'
                    },
                    subtextStyle: {//设置副标题样式
                        fontSize: 20,
                        color: "#666"
                    }
                },

                // 鼠标滑过显示悬浮框
                tooltip: {
                    // show:true,//鼠标滑过是否显示悬浮框 (默认为true开启 false为关闭)

                    //设置悬浮框内展示的内容
                    // a:series.name  b:series.data.name  c:series.data.value  d:当前数据所占数据的百分比
                    formatter: '{a}</br>{b}: {c} </br>所占比例: {d}%',
                },

                // 设置图例
                legend: {
                    orient: 'vertical',//图例的排列方式 (默认 horizontal:水平方向排列 vertical:垂直方向排列)
                    right: 'right',//图标在前文字在后,图例靠右居中显示 (也可以是: left || center || right || 百分比:xx% || xx(默认单位px)  )
                    y: 'center',//图例y轴居中(也可以是: top || center || bottom || 百分比:xx% || xx(默认单位px)  )
                    itemStyle: {},//设置图例前面的图标样式
                    textStyle: {//设置图例文字样式
                        fontSize: 14
                    }
                },
                // 设置主体
                series: [
                    {
                        name: 'hello world', //echarts图名字
                        type: 'pie',//echarts 类型
                        minAngle: 5,//echarts数据value为0时默认为value为5
                        radius: ['30%', '40%'],//设置环形图 ( radius: ['设置内圆大小', '设置外圆大小']  不折设置默认为实心圆饼图)
                        center: ['50%', '50%'],//设置饼图位置 (center:['x轴位置','y轴位置']不设置默认在中间)
                        data: [ //echarts数据
                            { value: 80, name: 'ONE' },
                            { value: 50, name: 'TWO' },
                            { value: 120, name: 'THREE' },
                            { value: 210, name: 'FOUR' },
                            { value: 0, name: 'FIVE' }
                        ],
                    },

                ]
            }
        }
    },
    mounted() {
        // 初始化数据的总数
        this.option.series[0].data.forEach(v => {
            this.echartsSumnum += v.value
        })
        this.option.title.text = this.echartsSumnum

        var chartDom = document.getElementById('main');
        var myChart = echarts.init(chartDom);

        let echartsArr = []; //点击图例后所剩的数据名
        let echartsNum = 0;//点击图例后所剩的数据的总和
        // 利用echarts自带的legendselectchanged方法获取点击后的数据(但是这里只能获取到名字)
        myChart.on('legendselectchanged', (params) => {
            echartsArr = [];//将点击后的数组设为空(每点击一次就重新判断添加)
            // 循环点击图例后获取到的名字
            for (let key in params.selected) {
                // 判断值是否为true 将值为true的名字push到echartsArr数组当中保留起来
                if (params.selected[key]) {
                    echartsArr.push(key)
                }
            }
            echartsNum = 0; //将总数的值设为0(每点击一次就重新计算)
            // 循环判断数据的全部数据里的name值是否与我们点击图例后所剩数据的数组相等
            // 相等的话就将其value值进行相加得出点击图例后所剩数据的总数
            this.option.series[0].data.forEach(item => {
                echartsArr.forEach(v => {
                    if (item.name === v) {
                        echartsNum += item.value
                    }
                })
            })
            this.option.title.text = echartsNum //最后将其赋值给主标题即可
            this.$nextTick(() => {
                myChart.setOption(this.option);
            })
        })

        myChart.setOption(this.option);

    }
}
</script>

<style scoped lang="less">
#main {
    width: 800px;
    height: 500px;
}
</style>

有不足的地方还望各位大佬指点一二

 

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

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

相关文章

Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(搭建开发环境)

基于 Vue3.x Vant UI 的多功能记账本&#xff08;二&#xff09; 文章目录基于 Vue3.x Vant UI 的多功能记账本&#xff08;二&#xff09;搭建开发环境项目演示1、创建项目2、配置路由3、添加 Vant UI 组件库4、移动端 rem 配置5、添加 iconfont 文字图标库6、二次封装 Axio…

Vue实现鼠标悬浮隐藏与显示图片效果 @mouseenter 和 @mouseleave事件

前言 前端vue 有个功能是鼠标移动到指定item上显示出来一个编辑和删除的图标 鼠标悬停在列表那么需要有悬浮显示的列表编辑和删除icon 文字不好描述&#xff0c;因为是web端录屏也比较麻烦 这里用截图说明 图片说明 功能实现 之前没做过这种效果&#xff0c;问了一下我的组长…

echarts 地图和柱状图结合(在地图上显示柱状图)

如图&#xff0c;需求要做一个在地图上显示柱状图的echarts图&#xff0c;但是百度了半天&#xff0c;发现很少有人发这种例子。这个代码也是借鉴的别人的文章&#xff0c;但需求肯定不完全一致&#xff0c;那我会根据我的需求把代码和注意事项发出来并解释。&#xff08;如果有…

ant-design-vue:基础使用

一、环境介绍 vue3tsant-design-vue 二、安装使用 2.1、安装脚手架工具 $ npm install -g vue/cli # OR $ yarn global add vue/cli 2.2、创建一个demo项目 2.2.1、创建项目 $ vue create antd-demo 2.2.2、 安装成功&#xff1a; 2.2.3、 项目目录及启动项目&#xff1a…

前端常见的几种布局方式,2分钟即可看完,全是干货。

前端常见的几种布局方式 提示&#xff1a;本篇文章不包含具体知识点&#xff0c;但是可以帮助小白了解到什么是布局 文章目录前端常见的几种布局方式前言参考文档一、前端常见的几种布局方式是什么&#xff1f;二、几大布局介绍1.浮动布局2.定位布局3.弹性布局4.栅格布局5.响应…

scss安装入门到使用高级语法

一.sass的基本概念 sass是css的"预处理器", 一门专门的css编程语言 增加了变量, 函数, 计算, 嵌套关系等用法,让css编写更简洁, 清晰. 二. scss的安装步骤 首先查询一下是否已经安装过sass, 在cmd中输入sass -v 或者 sass --version sass -vsass --version使用上…

【前端修炼之路】第一话 · 初识前端领域

写在前面 夏日炎炎&#xff0c;现在屋外的鸟儿叫的很欢&#xff0c;屋内刚刚组装完的主机风扇在轰轰作响&#xff0c;呜呜呜&#xff0c;怎么闻怎么看都不像是矿卡的显卡现在竟散发出阵阵甜味~哈哈哈哈开个玩笑&#xff0c;写个文章看个视频&#xff0c;这显卡的风扇应该都不带…

申请百度地图开发者AK和基本使用

前言 有需求就会有市场&#xff0c;百度地图也会开放一些免费的Api。来提供一些基本的地图服务。 今天我们讲解的是百度地图申请AK过程&#xff0c;和申请完之后基本的使用&#xff0c;方便大家日后有需要浏览。 AK-申请 1.首先我们学习一个技术最直接的是去看官方文档&…

ES6中新语法:解构

目录 解构 1.解构初了解 2.解构详细解析 2.1对象属性赋值形式 2.2变量的声明 2.3怎么解构 3.实践 3.1数组的解构 3.2对象的解构 3.3解构参数 4.总结 ☀️作者简介&#xff1a;大家好我是言不及行yyds &#x1f40b;个人主页&#xff1a;言不及行yyds的CSDN博客 &#…

Element-UI--<el-switch>的@change回调函数的参数用法

原文网址&#xff1a;Element-UI--&#xff1c;el-switch&#xff1e;的change回调函数的参数用法_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Element-UI的<el-switch>的change回调函数的参数用法。 需求 2个switch组件&#xff0c;用同一个回调函数switch组件状…

Flask 与 Django 框架对比

详细分析了两种 Python Web框架&#xff1a; Flask 与 Django。从开发难易度、应用架构、性能、可扩展性以及适用范围等方面进行了详细说明。 Django 中级教程在 B 站上线&#xff0c;深入解析 Django 体系架构&#xff0c;实现从入门到精通的跨越。在线教程 前言 基于 Gith…

H5呼起微信支付(个人实践总结)

H5呼起微信支付存在两种场景 第一种&#xff1a;其他浏览器呼起微信支付。 第二种&#xff1a;微信内部呼起微信支付。 项目说明&#xff1a; 我这边的项目要求的两种方式均要适用。 产品要求是当支付失败时或者未支付情况是停留在支付订单页面&#xff0c;可再次发起订单请…

Vue3下使用Vuex(store)实现响应式全局变量

Vue3下使用Vuex store1 安装2 编写vuex配置文件2.1 目录及文件结构2.2 index.js文件2.3 编写vuex模块级参数文件2.4 index.js中引入模块级参数3 引入4 使用5 持久化5.1 vuex值存储在sessionStorge中5.1 vuex值存储在localStorge中注意本文记录了如何使用vuex建立响应式全局变量…

Java后端Date类型返回给前端变为时间戳解决方法

今天在制作个人博客的分页功能时候&#xff0c;发现了这个问题 后端查询数据正确&#xff0c;2022-11-12 数据库MySQL5.7 用的date类型 因为写文章一般yyyy-MM-dd 类型就够用了 如果你需要yyyy-MM-dd HH-mm-SS 这种带时分秒的用datetime类型 数据存的也是2022-11-12 格式正确…

【JSP入门】只知道HTML却不知道JSP?

前言 今天我们继续来总结学习JSP相关知识&#xff0c;上一篇我们学习了Servlet的基础入门&#xff0c;如果你还对Servlet那么建议你先去看一下上篇博客再回来。 传送门&#xff1a;【Servlet入门】一篇文章让你从没听过到了熟于心 在之前我们已经学习了HTML&#xff0c;CSS&…

html静态登录、注册页面

登录 代码如下 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <style> body { background: url(https://cdn.pixabay.com/photo/2018/08/14/13/23/ocean-3605547_1280.j…

windows7安装node14版本及以上

前言&#xff1a; gitee上拉了一个项目&#xff0c;npm install一直报错。一直没有解决&#xff0c;就去gitee上看前端启动教程。作者说要运行在node14或者16上。我就去官网下载node14的msi。这个是不支持windows7的。我就百度&#xff0c;他们说要下载压缩包。 我之前走了好…

sourcemap文件泄露漏洞

最近进行渗透测试时&#xff0c;时常遇到xray扫出sourcemap文件&#xff0c;每次扫到都要百度&#xff0c;因此做个笔记。 漏洞原理 在日常测试时&#xff0c;经常会遇到以js.map为后缀的文件 这是jQuery中的一个新功能&#xff0c;支持Source Map 非常多Webpack打包的站点都…

Vue3: vue3 props接多个不同类型的参数,默认false

哪天的问题来着...嘶...(挠头)... 之所以会卡在这里&#xff0c;是因为在我的经验及认知里&#xff0c;封装组件中props的使用&#xff0c;接参时从来都是一个参数对应一个值&#xff0c;尤其是在ts中&#xff0c;还更为严格地设定了参数类型&#xff0c;所以我的业务需求不知道…

保姆级教程!如何在安卓手机上安装使用油猴脚本

浏览器插件成千上万&#xff0c;但是大家都有一个共识&#xff0c;那就是油猴无插件能敌&#xff0c;原因就在于它一个插件就可以实现众多插件的功能。 首先需要明确一点的是&#xff0c;油猴插件本身是没有任何功能的&#xff0c;它需要依靠脚本来实现功能。至于脚本&#xf…