【已解决】Echarts报表表头过多情况下,图例与图表线条重叠显示

4 篇文章 0 订阅
2 篇文章 0 订阅

github地址:Data Visualization

---------------------------------------------------------------------------------------------------------------------------------------

当Echarts报表表头过多时,虽然Echarts会做自适应,但是由于图例文字可能过长等,图例与图表线条难免会重叠显示。如下图所示:

    参考这篇文章,以及Echarts的官方文档,得出以下解决方案:

    1. 文档注明【特殊字符串 ''(空字符串)或者 '\n' (换行字符串)用于图例的换行。】
    2. 换行后动态调整option中的grid.top值才能避免重叠;(定义了一个计算公式)


    在解决这个问题时,用PHP写了个定制Echarts的类,其中与调整图例相关的部分如下,仅供参考:

<?php

/**
 * Created by PhpStorm.
 * User: liuyuning
 * Date: 2016/8/9
 * Time: 18:59
 */
class Ep_CustomizeEcharts {

    const LINE_NUM_EACH_ROW              = 3;  //图例中每行显示的线条数目;
    const DEFAULT_LINE_NUM               = 6;  //采用默认grid.top值的默认线条数目;
    const DEFAULT_GRID_TOP_PECENTAGE     = 18; //默认的grid.top百分比(整数部分);
    const DELTA_GRID_TOP_PECENTAGE       = 9;  //超出默认线条数时的grid.top百分比增量(整数部分);
    const MAX_GRID_TOP_PECENTAGE         = 50; //最大的grid.top百分比(整数部分);


    /**
     * 调整图例显示样式
     * @params array 需要调整的图例
     * @return array
     */
    public function adjustLegend ($beforeLegend) {
        // 图例太多时,Echarts文档注明【特殊字符串 ''(空字符串)或者 '\n' (换行字符串)用于图例的换行。】
        $afterLegend = array();
        $index = 0;
        $len = count($beforeLegend);
        for ( $i = 0; $i < $len; $i++) {
            if (($index+1)%(self::LINE_NUM_EACH_ROW + 1) === 0) {
                $afterLegend[$index] = '';
                $index++;
                $afterLegend[$index] = $beforeLegend[$i];
            } else {
                $afterLegend[$index] = $beforeLegend[$i];
            }
            $index++;
        }

        return $afterLegend;
    }

    /**
     * 设置grid.top值
     * @params array 需要调整的图例
     * @return string
     */
    public function setGridTop($arrLegend) {

        $len = count($arrLegend);

        // 如果图例太多,需要调整option中的grid.top值才能避免重叠
        $topInt = $len > self::DEFAULT_LINE_NUM ?
            self::DEFAULT_GRID_TOP_PECENTAGE + self::DELTA_GRID_TOP_PECENTAGE
            * (Ceil(($len - self::DEFAULT_LINE_NUM)/self::LINE_NUM_EACH_ROW))
            : self::DEFAULT_GRID_TOP_PECENTAGE;
        if ($topInt >= self::MAX_GRID_TOP_PECENTAGE) {
            $topInt = self::MAX_GRID_TOP_PECENTAGE;
        }
        $gridTop = "$topInt%";

        return $gridTop;
    }

}


调整好的效果如下图所示:


github地址:Data Visualization


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值