Echarts柱状图,如何基于数据进行百分比显示

mock数据:

const a = [

            {

                reju: 'a',

                yuanyou: '1234',

                kuorong: '3456',

                rengonganju_: '6577',

                rengongganyu__: '5674'

            },

            {

                reju: 'a',

                yuanyou: '1234',

                kuorong: '3456',

                rengonganju_: '6577',

                rengongganyu__: '5674'

            },

            {

                reju: 'a',

                yuanyou: '1234',

                kuorong: '3456',

                rengonganju_: '6577',

                rengongganyu__: '5674'

            },

            {

                reju: 'a',

                yuanyou: '1234',

                kuorong: '3456',

                rengonganju_: '6577',

                rengongganyu__: '5674'

            },

            {

                reju: 'a',

                yuanyou: '1234',

                kuorong: '3456',

                rengonganju_: '6577',

                rengongganyu__: '5674'

            },

            {

                reju: 'a',

                yuanyou: '1234',

                kuorong: '3456',

                rengonganju_: '6577',

                rengongganyu__: '5674'

            },

            {

                reju: 'a',

                yuanyou: '1234',

                kuorong: '3456',

                rengonganju_: '6577',

                rengongganyu__: '5674'

            },

            {

                reju: 'a',

                yuanyou: '1234',

                kuorong: '3456',

                rengonganju_: '6577',

                rengongganyu__: '5674'

            }

        ],

定义柱状图的option

let option = {

            // title: {

            //     left: 'center',

            //     top: '6%',

            // },

            tooltip: {

                trigger: 'axis', //这里用的是坐标轴触发,多个数据

                axisPointer: {            // 坐标轴指示器,坐标轴触发有效

                    type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'

                },

                name:'122221',

                //formatter格式化方法。使用formatter自定义的数据,把内容通过处理让变成我们想要的样子。

                formatter: function (params) {// 这里鼠标悬浮显示对应item的每项数值

                    let num = (a[params[0].dataIndex].yuanyou-0)+(a[params[0].dataIndex].rengonganju_-0)

                   

                    var relVal = `总核数:${(num)}`;

                    relVal += '<br/>' + params[0].marker + params[0].seriesName + ' : ' + a[params[0].dataIndex].yuanyou;// 支持

                    relVal += '<br/>' + params[1].marker + params[2].seriesName + ' : ' + a[params[0].dataIndex].rengonganju_;// 反对

                    return relVal;

                },

            },

            legend: {

                bottom: 20,

                // data: ['视频/热剧/账号', '视频/热剧/播放', '视频/热剧/频道', '视频/热剧/详情', '视频/热剧/付费', '视频/热剧/接入', '视频/热剧/弹幕', '视频/热剧/评论']

            },

            grid: {

                top: '5%',

                left: '0%',

                right: '4%',

                bottom: '16%',

                containLabel: true

            },

            xAxis: [

                {

                    type: 'category',

                    data: ['视频/热剧/账号', '视频/热剧/播放', '视频/热剧/频道', '视频/热剧/详情', '视频/热剧/付费', '视频/热剧/接入', '视频/热剧/弹幕', '视频/热剧/评论'],

                    axisLabel: {

                        show: true,

                        interval:0,

                        textStyle: {

                            fontSize:'12',

                            itemSize:''

                           

                        }

                    },

                },

            ],

            yAxis: [

                {

                    type: 'value',

                    // max: 100,// 设置最大值是多少

                    // splitNumber: 5,// 设置分几段显示

                    axisLabel: {

                        show: true,

                        interval: 0,

                        formatter: '{value} %'  // 给每个数值添加%

                    },

                    show: true

                }

            ],

            series: [

                {

                    name: '原有核数',

                    type: 'bar',

                    barWidth : 25,

                    stack: 'Search Engine',

                    emphasis: {

                        focus: 'series'

                    },

                    data: initData('Google'),

                    itemStyle: {

                        normal: {

                            color:'#DCE3EE', //改变折线点的颜色

                        }

                    },

                   

                },

                {

                    name: '大事件扩容数',

                    type: 'bar',

                    stack: 'Search Engine',

                    emphasis: {

                        focus: 'series'

                    },

                    data: initData('Bing'),

                    itemStyle: {

                        normal: {

                            color:'#5C9DFF', //改变折线点的颜色

                        }

                    },

                   

                },

                {

                    name: '人工干预(正值)',

                    type: 'bar',

                    stack: 'Search Engine',

                    emphasis: {

                        focus: 'series'

                    },

                    data: initData('Others'),

                    itemStyle: {

                        normal: {

                            color:'#32D19F', //改变折线点的颜色

                        }

                    },

                },

                {

                    name: '人工干预(负值)',

                    type: 'bar',

                    stack: 'Search Engine',

                    emphasis: {

                        focus: 'series'

                    },

                    data: initData('Others_'),

                    itemStyle: {

                        normal: {

                            color:'#FA7883', //改变折线点的颜色

                        }

                    },

                },

            ]

        };

// 核心为  initData()与 Percentage()这两个函数


function initData(val) {

            var serie = [];

            // 通过循环判断使数组对象中的key相加

            for (var i = 0; i < a.length; i++) {

                var num = 0

                if (val == 'Google') {

                    num = a[i].yuanyou

                } else if (val == 'Bing') {

                    num = a[i].kuorong

                } else if (val == 'Others') {

                    num = a[i].rengonganju_

                } else if (val == 'Others_') {

                    num = a[i].rengongganyu__

                }

                var total = (parseFloat(a[i].yuanyou) + parseFloat(a[i].kuorong) + parseFloat(a[i].rengonganju_)) + parseFloat(a[i].rengongganyu__);

                // console.log((parseFloat(a[i].yuanyou) + parseFloat(a[i].kuorong) + parseFloat(a[i].rengonganju_)) + parseFloat(a[i].rengongganyu__));

                // 定义计算函数算出百分比

               

                var numcount = Percentage(num, total)

                serie.push(numcount);

            }

            return serie;

        },

function Percentage(num, total) {

            return (Math.round(num / total * 100) );// 小数点后两位百分比

        }


 

这样就可以实现了

 

ECharts是一个基于JavaScript的开源可视化库,用于构建交互式的图表和数据可视化界面。柱状图ECharts中的一种常见图表类型,用于展示不同类别或维度的数据之间的比较关系。 在ECharts中,可以通过设置柱状图的series属性来实现百分比显示。具体步骤如下: 1. 首先,需要引入ECharts的库文件和相关样式表。 2. 创建一个容器元素,用于放置柱状图。 3. 初始化ECharts实例,并将容器元素传入。 4. 定义柱状图的配置项,包括图表的标题、x轴和y轴的标签等。 5. 在配置项中定义series属性,设置柱状图的类型为'bar',并设置相应的数据。 6. 在series属性中设置label属性,通过formatter属性来设置百分比显示。 7. 调用ECharts实例的setOption方法,将配置项应用到图表中。 下面是一个示例代码: ```javascript // 引入ECharts库文件 <script src="echarts.min.js"></script> // 创建容器元素 <div id="chartContainer" style="width: 600px; height: 400px;"></div> // 初始化ECharts实例 var myChart = echarts.init(document.getElementById('chartContainer')); // 定义柱状图的配置项 var option = { title: { text: '柱状图百分比示例' }, xAxis: { data: ['类别1', '类别2', '类别3'] }, yAxis: {}, series: [{ name: '百分比', type: 'bar', data: [0.2, 0.4, 0.6], label: { show: true, position: 'top', formatter: '{c}%' } }] }; // 应用配置项到图表中 myChart.setOption(option); ``` 这样就可以实现一个简单的柱状图,并在柱状图的顶部显示百分比
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值