Echarts 在条形图中,如何加一条警戒线(markline),y轴双轴,警戒线单位为百分比

本文介绍如何使用ECharts实现带有警戒线的双轴条形图,详细讲解了配置项和代码示例,包括title、tooltip、toolbox、legend、xAxis、yAxis、series等属性的设置。

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

Echarts条形图
  警戒线主要用markline属性来实现,参考的官网API地址:http://echarts.baidu.com/api.html#echarts

  话不多说直接上图
条形图
这里主要实现的是添加警戒线,y轴为双轴,左侧是警戒线的单位,右侧是额度的单位


源码:

	var dom1 = " <div id='myChart1' style='width:500px;height:400px;float: left;margin-top: 40px;' ></div>" ;
        $('.content').append(dom1);
        var myChart = echarts.init(document.getElementById('myChart1'));


        option = {
            title : {
                text: '条形图',
                x:'center',
                textStyle:{//标题内容的样式
                    color:'#696969',//
                    fontStyle:'normal',//主标题文字字体风格,默认normal,有italic(斜体),oblique(斜体)
                    fontWeight:"lighter",//可选normal(正常),bold(加粗),bolder(加粗),lighter(变细),100|200|300|400|500...
                    fontFamily:"san-serif",//主题文字字体,默认微软雅黑
                    fontSize:16//主题文字字体大小
                }
            },
            tooltip: {
                trigger: 'axis',
                axisPointer : {            // 坐标轴指示器,坐标轴触发有效
                    type : 'none'        // 默认为直线,可选为:'line' | 'shadow'
                },
                formatter: function(datas)
                {
                    var res = "详情:" + '<br/>';
                    res += datas[0].seriesName + ' : ' +initdata+'元   ('+ datas[0].value + '%)'+ '<br/>';
                    res += '警戒线:'+maxvalue+'%' + '<br/>';
                    res += datas[1].seriesName + ' : ' + datas[1].value + '元'+ '<br/>';
                    return res;
                }


            },
            toolbox: {
                show : false
            },
            legend: {
                selectedMode:false, //关闭点击事件
                data:['总额度','已使用额度'],
                orient: 'vertical',
                left: 'left', //图标放在左边
            },
            xAxis: [//设置x轴
                {
                    type: 'category',
                    data: ['','额度',''],
                }
            ],
            yAxis: [//设置y轴
                {
                    type: 'value',
                    min: 0,
                    max: 100,
                    interval: 20,
                    axisLabel: {
                        show: true,
                        interval: 'auto',
                        formatter: '{value} %'
                    },
                },
                {
                    type: 'value',
                    splitLine: { show: false },
                    min: 0,
                    max: initdata,
                    formatter: '{value}元'
                }
            ],
            series: [
                {
                    name:'总额度',
                    type:'bar',
                    data:bardata,//数据
                    itemStyle: {
                        normal:{
                            color: function (params){
                                var colorList = [
                                    'rgba(70, 130, 180, 0.5)',
                                    'rgba(70, 130, 180, 0.5)',
                                    'rgba(70, 130, 180, 0.5)',
                                   ];
                                return colorList[params.dataIndex];
                            }
                        }
                    },
                    markLine : {
                        symbol:"none",               //去掉警戒线最后面的箭头
                        label:{
                            position:"end",         //将警示值放在哪个位置,三个值“start”,"middle","end"  开始  中点 结束
                            formatter: "警戒线"
                        },
                        data : [{
                            silent:false,             //鼠标悬停事件  true没有,false有
                            lineStyle:{               //警戒线的样式  ,虚实  颜色
                                type:"solid",
                                color:"rgba(238, 99, 99)"
                            },
                            name: '警戒线',
                            yAxis: MAXVALUE
                        }]
                    }
                },
                {
                    name:'已使用额度',
                    type:'bar',
                    data:bardata2,//数据
                    yAxisIndex:1,
                    itemStyle: {
                        normal:{
                            color: function (params){
                                var colorList = [
                                    'rgba(228, 57, 60, 0.6)',
                                    'rgba(228, 57, 60, 0.6)',
                                    'rgba(228, 57, 60, 0.6)',
                                    ];
                                return colorList[params.dataIndex];
                            }
                        }
                    }
                }
            ]
        };
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);

Echarts中,实现双轴,主要是两个地方配置,第一个在yAxis中配置,第二个在series中配置,
实现markline,在相对应的series中,配置markline属性,Label来调控标签显示的位置以及样式

### 解决方案 在 ECharts 横向条形图中,当 y 数据过多时,可能会出现显示不全的问题。以下是几种常见的解决方案: 1. **调整字体大小**:通过减少字体大小来适应更多的 y 标签[^2]。 ```javascript yAxis: { axisLabel: { fontSize: 8 // 减小字体大小以适应更多标签 } } ``` 2. **旋转标签**:将 y 标签旋转一定角度,避免重叠和超出容器范围[^3]。 ```javascript yAxis: { axisLabel: { rotate: 45, // 将标签旋转 45 度 interval: 0 // 强制显示所有标签 } } ``` 3. **截取过长的标签**:对于过长的 y 标签,可以使用 `formatter` 函数对其进行截取,并添省略号[^3]。 ```javascript yAxis: { axisLabel: { formatter: function (value) { if (value.length > 5) { // 如果长度超过 5 return value.substr(0, 5) + "..."; // 截取前 5 个字符并添省略号 } else { return value; } } } } ``` 4. **分页显示**:如果数据量过大,可以考虑分页显示,每次只展示部分数据。用户可以通过交互(如点击按钮或滚动)载更多数据[^2]。 5. **动态调整图表高度**:根据 y 数据的数量动态调整图表的高度,确保所有标签都能完整显示[^2]。 ```javascript var chartDom = document.getElementById('main'); var myChart = echarts.init(chartDom); var option; var dataLength = this.equipData.labels.length; var height = dataLength * 30; // 每个标签占用约 30px 高度 chartDom.style.height = height + 'px'; option = { yAxis: [{ type: 'category', data: this.equipData.labels, axisLabel: { fontSize: 12 } }], series: [{ type: 'bar', data: this.equipData.values }] }; myChart.setOption(option); ``` 6. **隐藏部分标签**:如果数据量特别大且无法动态调整高度,可以选择性地隐藏部分标签,仅显示关键信息[^3]。 ```javascript yAxis: { axisLabel: { interval: 1 // 每隔一个标签显示一次 } } ``` ### 注意事项 - 在实际应用中,可以根据具体需求选择一种或多种方法结合使用。 - 动态调整高度的方法适用于数据量变化较大的场景,但需要确保容器的高度不会超出页面限制。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值