Echarts 折線圖y軸標籤值太長時顯示不全的解決辦法

 


問題

先看一下正常的狀況
這裏寫圖片描述 javascript


再看一下顯示不全的狀況
這裏寫圖片描述
全部的數據都是從後臺取的,也就是說動態變化的,一開始的時候數據量不大不會出現問題,後面y軸的值愈來愈大的時候就出現了這個顯示不全的狀況。css


分析

先貼一下頁面代碼html

HTML前端

<div class="row-wrapper">
    <div class="div-flex" style="text-align:center">
        <div class="chart-tab selected" id="chart-tab0">最近30天</div>
        <div class="chart-tab" id="chart-tab1">最近15周</div>
        <div class="chart-tab" id="chart-tab2" style="border-right: 1px #dcdcdc solid;">最近12個月</div>
    </div>
    <div id="chart-line"></div>
</div>

CSSjava

.row-wrapper { padding: 10px 15px; border-top: 8px #eee solid; font-size: 15px; color: #737373; }

.chart-tab { flex: 1; border-top: 1px #dcdcdc solid; border-left: 1px #dcdcdc solid; border-top-left-radius: 5px; border-top-right-radius: 5px; }

.div-flex { display: -webkit-box; display: -webkit-flex; display: flex; }

#chart-line { height: 26rem; padding-left: 14px; padding-top: 10px; border: 1px #dcdcdc solid; }

.selected { background-color: #EAEAEA; }

JS(這裏只貼跟折線圖有關的部分)web

var lineChart = echarts.init(document.getElementById('chart-line'));

// 折線圖配置
option = {
    tooltip: {
        trigger: 'axis',
        hideDelay: '300'
    },
    xAxis: {
        show: false,
        type: 'category',
        data: [1, 2, 3, 4, 5, 6, 7],
        axisTick: {
            inside: true,
            alignWithLabel: true
        }
    },
    yAxis: {
        type: 'value',
        name: '營業額(元)',
        axisTick: {
            inside: true
        },
        scale: true
    },
    series: [{
        name: '營業額',
        type: 'line',
        data: [1100000, 2000000, 450000, 1370000, 1200000, 4030000, 2350000], // 由於是要分析的是前端問題,這裏我就直接寫一組很大的數據了,無論跟後臺交互部分
        lineStyle: {
            normal: {
                color: '#82c26b'
            }
        },
        itemStyle: {
            normal: {
                color: '#82c26b'
            }
        }
    }]
};

lineChart.setOption(option);

而後頁面運行的時候生成的html是這樣的
這裏寫圖片描述chrome

能夠看到 id=chart-line 的 div 是我定義的,而它裏面多了兩個元素,一個 div 和一個 canvas。這兩個就是 Echarts 運行以後添加上去的,其中 canvas 就是圖表自己,外層的 div 是一個裝它的容器。
因而我嘗試一下修改這幾個元素的 width、margin、padding,發現……沒用。
這裏寫圖片描述canvas

看下圖
這裏寫圖片描述
修改了marginpadding 的以後在 chrome的debug模式下看 canvas 是這樣的,能看到其實y軸文字部分仍是在content(藍色部分)裏面的,因此就能明白爲何修改 canvasmargin、padding 不會起做用了。
因而能得出結論,這是 canvas 繪圖的時候就定了的,因此要經過修改傳給 echarts 的參數來修改。markdown

好吧,那我們就去官網看API咯……app


解決辦法

官網在此:http://echarts.baidu.com/

咱們要看的是配置項的部分:http://echarts.baidu.com/option.html#title

能夠改的地方有下面幾個:

  1. yAxis.axisLabel.margin:刻度標籤與軸線之間的距離。默認值是8,能夠改小一點。不過原本的值已經很小了,這個沒多大做用。
  2. yAxis.axisLabel.formatter:刻度標籤的內容格式器,支持字符串模板和回調函數兩種形式。好比能夠設置太長了換行之類的。
  3. grid.left:grid 組件離容器左側的距離。默認值是10%。

最後的代碼以下。這裏就只列出修改了的部分了,比原來添加了 grid.leftyAxis.axisLabel

option = {
    ...
    yAxis: {
        type: 'value',
        name: '營業額(元)',
        axisTick: {
            inside: true
        },
        scale: true,
        axisLabel: {
            margin: 2,
            formatter: function (value, index) {
                if (value >= 10000 && value < 10000000) {
                    value = value / 10000 + "萬";
                } else if (value >= 10000000) {
                    value = value / 10000000 + "千萬";
                }
                return value;
            }
        },
    },
    grid: {
        left: 35
    },
    ...
};

最終效果還行。。
這裏寫圖片描述


PS:最後忍不住要吐槽,這幾個配置項找了我老半天啊囧

相關文章
相關標籤/搜索