vue-echarts 柱状图Y轴Name因为数据过小导致显示不全的问题& legend(图例)和Y轴文字自适应对齐

项目场景:

导致这个问题产生的原因是,当数据过小时,Y轴的宽度过小,导致Y轴的name无法全部显示。

解决这个问题的方法也比较多:

1.把Y轴的宽度加大

2.设置Y轴的最小值

3.加大Y轴与图表的margin

上述三个方法都能在echart的官网找到对应的API,所以在这里就不多赘述

我使用的方法是使用echart中的graphic来自定义name,对比上述的其他方法,优势就是不用改变echart图表的样式,保持页面较为美观

//使用的是基于简单封装过的echart文件,因为
//在setOption,初始化绘制图表时,接收外部传入的option。基于这个option来自定义name

this.myChart.setOption(this.setgraphic(option)) 


setgraphic(obj){
     obj.graphic = [] //自定义右侧Name
      // Y轴name左对齐
      if (Array.isArray(obj.yAxis)) {
        // 处理只有一个Y轴时,图例右对齐
        obj.yAxis.forEach((res, index) => {
          let graphicObj = {
            type: 'text',
             //graphicTop为自定义参数,为graphic在图表中的高度,根据自己的需要进行定义,可不传
            top: res.graphicTop?res.graphicTop:'8%',
            style: {
              text: res.name,
              fontSize: 14,
              fill:'#666666'
            },
          }
            //Y轴有两个的适配
          if(index==0){
            graphicObj.left = 0
          }else{
            graphicObj.right = 0
          }
          obj.graphic.push(graphicObj)
           res.nameTextStyle =  {
           color: 'transparent'  // y 轴标签颜色为透明,不清空是因为防止再次渲染时改变了配置项
          }
        })
      }
    return obj
}

得出得效果为 

第二,如果Y轴有两个name,且显示legend的时候往往会出现一个问题

legend与Y轴name对齐的问题,项目中echart的数量少还好说,可以用legend 的 style来用像素进行定位对齐,但是数量多的时候就只能另辟蹊径了,也是用了一个取巧的方法,我们来改造一下上面的方法

//使用的是基于简单封装过的echart文件,因为
//在setOption,初始化绘制图表时,接收外部传入的option。基于这个option来自定义name

this.myChart.setOption(this.setgraphic(option)) 


setgraphic(obj){
     obj.graphic = [] //自定义右侧Name
      // Y轴name左对齐
      if (Array.isArray(obj.yAxis)) {
         // 处理只有一个Y轴时,图例右对齐
        if(obj.yAxis.length == 1){
          this.setLegendOption(obj)
        }
        obj.yAxis.forEach((res, index) => {
          let graphicObj = {
            type: 'text',
             //graphicTop为自定义参数,为graphic在图表中的高度,根据自己的需要进行定义,可不传
            top: res.graphicTop?res.graphicTop:'8%',
            style: {
              text: res.name,
              fontSize: 14,
              fill:'#666666'
            },
          }
            //Y轴有两个的适配
          if(index==0){
            graphicObj.left = 0
          }else{
            graphicObj.right = 0
          }
          obj.graphic.push(graphicObj)
           res.nameTextStyle =  {
           color: 'transparent'  // y 轴标签颜色为透明,不清空是因为防止再次渲染时改变了配置项
          }

         // 如果第二条Y轴Name为空的时候,也需将图例向右对齐
            if(index ==1&&!res.name){
                this.setLegendOption(obj)
            }else{
              // 如果第二条Y轴有Name的话,图例和Name对齐
                this.setLegendOption(obj,res.graphicTop?res.graphicTop:'8%','top')
                this.setLegendOption(obj,[0 , 20],'padding')
                // 按照Name的长度来决定图例右边距
                this.getGraphicWidth(res.name,obj)
            }
        })
      }
     return obj
}


     // 设置Legend参数
    setLegendOption(obj,num = 0,direction="right"){
      obj.legend[direction] = num
    },
    // 获取graphic的宽度
    getGraphicWidth(name,obj){
     //这里用了一个取巧的方法,取了name的长度来判断graphic的宽度,使得graphic与Legend保持20px        
     //的距离
     this.setLegendOption(obj,(name.length*14)+'px','right')
    },

然后就能得到一个比较好的对齐效果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要解决echarts柱y轴文字问题,可以使用echarts的graphic属性来自定义y轴的名称。根据引用中的代码,我们可以通过设置graphic属性来添加自定义的文字。具体步骤如下: 1. 在setOption方法中,找到yAxis这个属性,并判断它是否为数组。 2. 如果是数组,遍历yAxis数组,对每个y轴进行处理。 3. 定义一个graphicObj对象,设置type为'text',top为文字表中的高度,style中设置文字的样式,包括文字内容、字体大小和颜色等。 4. 根据y轴的索引,判断是左对齐还是右对齐,分别设置left或right属性。 5. 将graphicObj对象添加到obj.graphic数组中。 6. 最后返回处理后的obj对象。 通过以上步骤,可以实现自定义y轴的名称,并解决y轴文字问题。此方法不改变echarts表的样式,保持页面的美观。参考引用中的说明。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue-echartsY轴Name因为数据过小导致显示问题& legend图例)和Y轴文字适应对齐](https://blog.csdn.net/weixin_42623929/article/details/130725082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [echarts x轴文字过长悬浮显示.rar](https://download.csdn.net/download/qq_29988051/11463177)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值