echarts--柱状图每个柱子和图例对应,给数值和纵坐标自定义添加'%'

博客围绕ECharts柱状图展开,提出了柱子内容与图例对应且颜色一致、纵坐标和柱子上方数值添加'%'、图例显示在右边并设置位置等需求,随后直接给出实现代码,还提醒看代码注释及引入相关文件,欢迎留言交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单描述需求:

1、每个柱子表示的内容 和 图例对应 ,并且相对应的柱子和图例颜色一致;
2、纵坐标和 柱子上边 数值都需要添加’%’;
3、图例显示在右边,涉及到位置设置;

看下图,是你想要的柱状图吗?
在这里插入图片描述

接下来直接上代码

!!!重点看代码中的注释

不要忘记引入echarts.min.js和jquery.min.js哦!!!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>柱状图</title>
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/echarts.min.js"></script>
</head>
<body style="background:#000;">
    <div id="bar" style="width:500px;height: 250px;"></div>
    <script type="text/javascript">
    var bar_data = [12,23,34,43,33,23,11,22,6]; //模拟数据
    var chart = echarts.init(document.getElementById('bar'));
    var option = {
        tooltip : {
            formatter: '{a}:{c}%'//a 是series中每条数据name值,c 是data数值
        },
        legend: {
            orient: 'vertical', // 'horizontal'
            data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎','百度','谷歌','必应','其他'],
            textStyle: {  // 图列内容样式
                color: '#fff',  // 字体颜色
            },
            x: '70%',//图例位置,设置right发现图例和文字位置反了,设置一个数值就好了
            y: 'center'//延Y轴居中
        },
        grid: {
            left: '3%',
            right: '30%',
            top: '3%',
            bottom:'3%',
            containLabel: true
        },
        xAxis : [ //横坐标
            {
                type : 'category',
                data : [''],
                axisLine: {
                    lineStyle: {
                        color: "#fff",//横坐标线条颜色
                    }
                }
            }
        ],
        yAxis : [ //纵坐标
            {
                type : 'value',
                axisLabel: {
                    show:true,
                    formatter: '{value}%',//给Y轴数值添加百分号
                },
                axisLine: {
                    lineStyle: {
                        color: "#fff",//纵坐标线条颜色
                    }
                }
            }
        ],
        color:['#0287f8','#269cff','#58b1fc','#2fb6f6','#03cdfa','#3ed9fc','#05f6f6','#47fefe','#7dfcfc','#a9ffff'],//柱状图的颜色
        series : [
            {name:'直接访问'},
            {name:'邮件营销'},
            {name:'联盟广告'},
            {name:'视频广告'},
            {name:'搜索引擎'},
            {name:'百度'},
            {name:'谷歌'},
            {name:'必应'},
            {name:'其他'}
        ]
    };

    for(var i = 0; i< option.series.length; i++){
        var style = { //定义柱状图的样式
            normal: {
                label: {
                    show: true,
                    position: 'top', //柱子上方显示 数值
                    formatter: '{c}%' //数值加上'%'
                }
            }
        };
        option.series[i].type = 'bar'; //每条数据指定类型为'bar'
        option.series[i].itemStyle = style; // series中每条数据都加的样式
        option.series[i].data = [bar_data[i]]; //series 中 data赋值
    };

    chart.setOption(option);
    </script>
</body>
</html>

如有什么问题可以留言给我哦,欢迎大牛们指点~~

<think>我们面对的问题是如何在ECharts中实现饼图显示柱状图图例(legend),并展示横坐标值。根据用户描述,用户希望在一个图表中同时展示饼图柱状图,并且共享图例或坐标轴信息。分析需求:1.饼图显示柱状图的legend:通常饼图柱状图是两种不同的图表类型,它们的图例数据来源不同。但用户希望饼图能使用柱状图图例,这意味着我们需要让两种图表共享同一份图例数据。2.展示横坐标值:横坐标值通常是柱状图(或条形图)的坐标轴标签,而饼图没有坐标轴。因此,这里可能是指柱状图的横坐标值需要显示,同时饼图要与之关联。解决方案思路:我们可以使用ECharts的“多图表联动”功能,或者在一个图表实例中组合使用饼图柱状图(例如使用grid饼图的位置调整)。但更常见的是使用多个图表实例进行联动,或者使用ECharts的“dataset”“多系列”来组合图表。然而,用户要求饼图显示柱状图图例,这通常意味着我们希望饼图的每个扇形对应柱状图中的一根柱子(即同一个数据项),并且图例柱状图的数据项名称(即横坐标值)。具体步骤:1.准备一个公共的dataset,包含柱状图的横坐标(category)数据对应数值(value)数据。2.同时绘制柱状图饼图,都使用这个dataset。3.设置图例(legend)为柱状图的横坐标值(即category),这样两个图表可以共享同一个图例。4.通过图例的切换同时控制两个图表。注意:ECharts中,饼图的数据格式是{name,value},柱状图的数据格式可以是(在category轴上显示name,y轴显示value)。因此,我们可以将同一组数据分别用于柱状图饼图。实现示例:假设我们有如下数据: ```javascriptvar data= [{name: '类别1', value:10},{name:'类别2',value:20},{name: '类别3', value:30},{name:'类别4',value:40} ];```我们可以在一个option中同时配置柱状图饼图(使用grid划分区域),或者使用两个图表实例联动。这里为了简单,我们使用一个图表实例,通过grid饼图的位置设置来组合。示例代码(一个图表实例): ```html<divid="main"style="width:800px;height:600px;"></div> <script>//基于准备好的dom,初始化echarts实例var myChart =echarts.init(document.getElementById('main'));//数据vardata =[{name: '类别1', value:10},{name:'类别2',value:20},{name: '类别3', value:30},{name:'类别4',value:40}];//提取name数组,用于柱状图的xAxis.data图例varnames= data.map(function(item){return item.name;});//配置项varoption ={//使用一个公用的图例,数据来自name数组legend: {data: names},//设置网格布局,用于放置柱状图grid:{left:'3%',right: '55%', //右侧留出空间给饼图top:'10%',bottom: '10%',containLabel: true},//横坐标轴(柱状图)xAxis:{type:'category',data:names},//纵坐标轴(柱状图)yAxis: {type: 'value'},//系列series: [//柱状图系列{name: '柱状图',type: 'bar',data: data.map(function(item){return item.value;})},//饼图系列{name:'饼图',type: 'pie',//设置饼图的位置,在右侧center: ['75%', '50%'], //中心点位置(百分比或像素)radius: '40%', //饼图半径data:data,//饼图数据直接使用data数组(每个元素是{name,value})//饼图的标签显示label:{formatter: '{b}:{c} ({d}%)'// b是数据项名称,c是数值,d是百分比}}]};//使用刚指定的配置项数据显示图表。myChart.setOption(option); </script>```在这个配置中:-图例(legend)的数据来自我们提取的names数组,即柱状图的横坐标值(也是饼图的数据项名称)。-柱状图使用xAxis的category轴,数据为names,yAxis为数值轴,柱状图系列的数据是value数组。-饼图放置在右侧,使用同样的数据(每个数据项包含namevalue),饼图的每个扇形对应一个数据项。-当点击图例时,柱状图饼图会同时响应(因为图例是公用的,并且两个系列都使用了同样的name)。注意:上述代码中,饼图的位置通过centerradius调整,grid控制柱状图的区域。如果用户希望柱状图的横坐标值(即names)显示在饼图的图例上,那么我们已经实现了:图例显示的就是这些names。另外,用户提到“展示横坐标值”,在柱状图中已经通过xAxis显示出来了,而饼图没有横坐标,但通过图例标签可以展示同样的信息。引用说明:在ECharts中,组合图表是常见的需求,可以通过合理的配置实现[^1][^2]。相关问题:1.如何在ECharts中实现多个图表的联动?2.ECharts中饼图的标签格式如何自定义?3.如何调整组合图表中各个部分的位置大小?</think>### ECharts饼图显示柱状图图例及横坐标值实现方案 要实现饼图显示柱状图图例(legend)并展示横坐标值,可通过以下步骤实现: #### 核心思路 1. **共享数据集**:使用同一份数据源驱动饼图柱状图 2. **图例联动**:通过`legend`组件的`data`属性统一控制 3. **坐标轴标签显示**:在柱状图的`xAxis`中配置横坐标值 4. **视觉映射**:使用`visualMap`保持颜色一致性 #### 实现代码示例 ```html <div id="chartContainer" style="width: 800px;height:500px;"></div> <script> // 初始化图表 const chart = echarts.init(document.getElementById('chartContainer')); // 公共数据源(柱状图横坐标值作为饼图图例) const data = [ { name: '类别A', value: 235 }, { name: '类别B', value: 274 }, { name: '类别C', value: 190 } ]; // 配置项 const option = { // 共享图例配置(显示柱状图横坐标值) legend: { data: data.map(item => item.name), // 使用柱状图横坐标值 left: 'center', bottom: 0 }, // 柱状图配置 xAxis: { type: 'category', data: data.map(item => item.name), // 横坐标值 axisLabel: { rotate: 30 } // 横坐标标签旋转防重叠 }, yAxis: { type: 'value' }, // 饼图配置 series: [ // 柱状图系列 { type: 'bar', data: data.map(item => item.value), // 与饼图颜色同步 itemStyle: { color: params => chart.getModel().getSeries()[1].getData().getItemVisual(params.dataIndex, 'color') } }, // 饼图系列 { type: 'pie', radius: '40%', center: ['75%', '40%'], // 饼图位置 data: data, label: { show: true, formatter: '{b}: {c} ({d}%)' } } ] }; chart.setOption(option); </script> ``` #### 关键配置说明 1. **图例统一控制** `legend.data`使用柱状图的横坐标值数组,使饼图自动继承这些图例项: ```javascript legend: { data: data.map(item => item.name) // 柱状图横坐标值作为图例 } ``` 2. **横坐标值显示** 在柱状图的xAxis中直接使用数据源的name属性: ```javascript xAxis: { type: 'category', data: data.map(item => item.name) // 显示横坐标值 } ``` 3. **颜色同步机制** 通过动态获取饼图颜色应用到柱状图: ```javascript itemStyle: { color: params => chart.getModel() .getSeries()[1] // 获取饼图系列 .getData() .getItemVisual(params.dataIndex, 'color') // 获取对应颜色 } ``` 4. **布局优化** - 使用`center`调整饼图位置避免重叠 - `axisLabel.rotate`防止横坐标文字重叠 - 图例放在底部(`bottom:0`)节省空间 #### 效果说明 1. 柱状图显示完整的横坐标标签 2. 饼图使用柱状图的横坐标值作为图例 3. 点击图例会同时高亮/隐藏两个图表中的对应数据项 4. 颜色保持完全一致,实现视觉统一 > 此方案通过数据绑定视觉映射实现了图表间的深度联动,符合ECharts的最佳实践[^1][^2]。实际应用中可根据需求调整饼图半径(`radius`)、位置(`center`)等参数优化布局。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值