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

Posted 热乎劲的小仓库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue echarts饼图环形 (随着legend动态显示数据总数)相关的知识,希望对你有一定的参考价值。

目录

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>

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

 

echarts白色实心环形图(空心饼图)的编写

// 数据接入机构统计
let myDom = document.getElementById(‘myChart‘);
let myWidth = myDom.offsetWidth - 5; // 获取容器宽度
let myHeight = myDom.offsetHeight - 5; // 获取容器高度
let myRadius = myHeight * 0.44 / 2; // 根据环形图内圈百分比获取内圆半径
let myPX = (0.3 - (myRadius / myWidth)) * 100 + ‘%‘; // 获取白色填充圆在容器中的x轴位置百分比,以便与环形图贴合
let myChart = echarts.init(document.getElementById(‘myChart‘));
let option = {
title: { // 标题样式
text: ‘数据接入机构统计‘,
textStyle: {
color: ‘#cccccc‘,
fontSize: 14
}
},
tooltip: { // 悬浮提示
trigger: ‘item‘,
formatter: "{a} <br/>{b}: {c} ({d}%)"
},
legend: {
orient: ‘vertical‘,
top: ‘20%‘,
right: 20, // 与容器距离调节
icon: ‘circle‘, // 样式调节 ‘circle‘‘rect‘‘roundRect‘‘triangle‘‘diamond‘‘pin‘‘arrow‘‘none‘等
itemWidth: 7,
textStyle: {
color: ‘#ffffff‘,
fontSize: 10,
padding: [0, 0, 0, 5] //字与图形间的边距
},
data:[‘111‘,‘222‘,‘333‘]
},
graphic: {
elements: [
{
type: ‘group‘,
left: myPX, // 横坐标位置
top: ‘33%‘, // 纵坐标位置 55% - (44% / 2)
children: [
{
type: ‘circle‘,
shape: {
r: myRadius // 白色圆半径
},
style: {
fill: ‘#fff‘ // 背景颜色
}
},
{
type: ‘text‘, // 覆盖在圆上的文字位置和样式
style: {
text: 12345,
y: -10,
textAlign: ‘center‘,
fontSize: 12,
fill: ‘#494949‘
}
},
{
type: ‘text‘,
style: {
text: ‘条‘,
y: 10,
textAlign: ‘center‘,
fontSize: 13,
fill: ‘#494949‘
}
}
]
}
]
},
series: [
{
name:‘机构统计‘,
type:‘pie‘,
radius: [‘44%‘, ‘70%‘], // 环形图大小和粗细
avoidLabelOverlap: false,
center: [‘30%‘, ‘55%‘], // 环形图位置
label: {
normal: {
show: false, // 设置不显示
position: ‘center‘ // hover时提示在圆环内
}
},
data:[
{value:335, name:‘111‘},
{value:310, name:‘222‘},
{value:234, name:‘333‘}
]
}
]
};
myChart.setOption(option);

以上是关于vue echarts饼图环形 (随着legend动态显示数据总数)的主要内容,如果未能解决你的问题,请参考以下文章

echart 环形饼图中间再加上一个环怎么弄?

echarts饼图的legend形状可以修改么

Echarts 饼图 图例修改,legend样式修改

echarts饼图的legend形状可以修改么

echarts中常用的参数

ECharts 环形饼图 动态获取json数据