简易单柱子

描述:当前是关于Echarts图表中的 柱状图 示例。
 
            var data = {
    id: 'multipleThree',
    title: '简易单柱子',
    symbol: '%', //数值是否带百分号        --默认为空 ''
    yAxisLabel: false, //展示Y轴信息        --默认不展示 false
    seriesLabel: true, //柱子上方toplabel --默认展示 trur
    barWidth: 12, //柱子宽度               --默认12
    scale: false, //y轴是否自动            --默认不自动 false
    xWidth: 55, //x轴label                 --默认像素宽度70
    legendRight: '38%', //图例具右侧位置   --默认center居中
    ysplitLine: '#F1F3F5', //y轴横向分割线颜色 --默认#F1F3F5
    legendShow: false, //图例是否展示  --默认展示true
    splitNum: [4, 4, 5, 6], //x轴label换行 --默认值 3 3 4 6  四个阶段 <=4 | 5-7| 8-9 |10-14
    legend: ['正面占比', '中立占比', '负面占比'], //必选参数
    xAxis: ['只想要你知道', '遥不可及的你', '只要平凡', '时间飞行', '对你太想念'],
    yAxis: [
        [20, 15, 12, 18, 17, 9, 8, 7, 7, 8, 7, 3, 5]
    ],
    color: ['#7091C4'] //柱子颜色 必填参数
}


var _this = this;
var action = data.action || false
var symbol = data.symbol || ' '
var splitNum = data.splitNum || [4, 4, 4, 6, 8, 10]
let xAxis = data.xAxis

// 保留一位小数,可选择性使用
function utilNumDecimal(x) {
    if (x == 0) return '0.0'
    if (!x) return '-'
    if (isNaN(x)) {
        return '--';
    }
    let f = Math.round(x * 10) / 10;
    let s = f.toString();
    let rs = s.indexOf('.');
    if (rs < 0) {
        rs = s.length;
        s += '.';
    }
    while (s.length <= rs + 1) {
        s += '0';
    }
    return s;
}

var myData = (function test() {
    let yAxis = data.yAxis
    let legend = data.legend
    let seriesLabel = data.seriesLabel === false ? false : true
    let seriesArr = []
    let legendArr = []
    yAxis && yAxis.forEach((item, index) => {
        legendArr.push({
            name: legend[index]
        })

        var tempArr = [];
        let num = '';
        item.forEach((value, _) => {
            if (value || value === 0) {
                num = value
            } else {
                num = 'null';
            }
            tempArr.push(num);
        })

        seriesArr.push({
            name: legend[index],
            type: 'bar',
            barGap: .4,
            data: tempArr,
            barCategoryGap: '2%',
            barWidth: data.barWidth || 12,
            label: {
                normal: {
                    show: seriesLabel,
                    formatter: function(data) {
                        return utilNumDecimal(data.value)
                    },
                    position: 'top',
                    textStyle: {
                        color: '#414957',
                        fontStyle: 'normal',
                        fontFamily: '微软雅黑',
                        textAlign: 'left',
                        fontSize: 11,
                    },
                },
            },
            itemStyle: { //图形样式
                normal: {
                    barBorderRadius: 4,
                    color: data.color[index]
                },
            }
        })
    })
    return {
        seriesArr,
        legendArr
    }
})()


option = {
    backgroundColor: '#fff',
    title: {
        show: true,
        text: data.title,
    },
    tooltip: {
        trigger: 'axis',
        formatter: function(params) {
            var time = '';
            var str = '';
            for (var i of params) {
                time = i.name.replace(/\n/g, '') + '<br/>';
                if (i.data == 'null' || i.data == null) {
                    str += '<span style="height: 10px;width: 10px;display: inline-block;border-radius: 50%;background:' +
                        data.color[i.seriesIndex] + '"></span> ' + i.seriesName + ':无数据' + '<br/>'
                } else {
                    str += '<span style="height: 10px;width: 10px;display: inline-block;border-radius: 50%;background:' +
                        data.color[i.seriesIndex] + '"></span> ' + i.seriesName + ':' + i.data + symbol + '<br/>'
                }

            }
            return time + str;
        },
        axisPointer: {
            type: 'none'
        }
    },
    legend: {
        show: data.legendShow === false ? false : true,
        right: data.legendRight || 'center',
        top: 20,
        itemWidth: 10,
        itemHeight: 10,
        itemGap: 10,
        borderRadius: 4,
        data: myData.legendArr,
        textStyle: {
            color: '#414957',
            fontStyle: 'normal',
            fontFamily: '微软雅黑',
            fontSize: 12,
        }
    },
    grid: {
        x: 46,
        y: 80,
        x2: 30,
        y2: 54,
    },
    xAxis: {
        type: 'category',
        data: xAxis,
        axisTick: {
            show: false,
        },
        axisLine: {
            show: false
        },
        axisLabel: {
            show: true,
            interval: '0',
            textStyle: {
                color: '#687284',
                align: 'center',
                whiteSpace: 'wrap',
                lineHeight: 15,
                height: 50,
                fontSize: 10
            },
            rich: {
                normal: {
                    height: 18,
                },
            },
            formatter: function(params, index) {
                var newParamsName = "";
                var splitNumber = 5;
                var paramsNameNumber = params && params.length;
                if (paramsNameNumber && paramsNameNumber <= 4) {
                    splitNumber = splitNum[0] || 4;
                } else if (paramsNameNumber >= 5 && paramsNameNumber <= 7) {
                    splitNumber = splitNum[1] || 4;
                } else if (paramsNameNumber >= 8 && paramsNameNumber <= 9) {
                    splitNumber = splitNum[2] || 4;
                } else if (paramsNameNumber >= 10 && paramsNameNumber <= 14) {
                    splitNumber = splitNum[3] || 5;
                } else if (paramsNameNumber >= 15 && paramsNameNumber <= 16) {
                    splitNumber = splitNum[4] || 6;
                } else if (paramsNameNumber >= 17 && paramsNameNumber <= 20) {
                    splitNumber = splitNum[5] || 6;
                } else {
                    params = params && params.slice(0, 21);
                }

                var provideNumber = splitNumber; //一行显示几个字
                var rowNumber = Math.ceil(paramsNameNumber / provideNumber) || 0;
                if (paramsNameNumber > provideNumber) {
                    for (var p = 0; p < rowNumber; p++) {
                        var tempStr = "";
                        var start = p * provideNumber;
                        var end = start + provideNumber;
                        if (p == rowNumber - 1) {
                            tempStr = params.substring(start, paramsNameNumber);
                        } else {
                            tempStr = params.substring(start, end) + "\n";
                        }
                        newParamsName += tempStr;
                    }

                } else {
                    newParamsName = params;
                }

                let tag = 'normal'
                let arr = newParamsName.split('\n')
                let str = []
                switch (arr.length) {
                    case 3:
                        arr.forEach((item, index) => {
                            str.push('{' + tag + '|' + item + '}')
                        })
                        break;
                    case 2:
                        arr.forEach((item, index) => {
                            str.push('{' + tag + '|' + item + '}')
                        })
                        str.push('{' + tag + '|' + ' ' + '}')
                        break;
                    case 1:
                        arr.forEach((item, index) => {
                            str.push('{' + tag + '|' + item + '}')
                        })
                        str.push('{' + tag + '|' + ' ' + '}')
                        str.push('{' + tag + '|' + ' ' + '}')
                        break;
                    default:
                }
                return str.join('\n');
            },
            color: '#687284',
        }
    },
    yAxis: {
        scale: data.scale === true ? true : false,
        axisLine: {
            show: false
        },
        axisTick: {
            show: false
        },
        axisLabel: {
            show: data.yAxisLabel || false,
            textStyle: {
                color: '#687284'
            }
        },
        splitLine: {
            show: true,
            lineStyle: { // 属性lineStyle(详见lineStyle)控制线条样式
                color: data.ysplitLine || '#F1F3F5',
                type: 'solid'
            },
        },
    },
    series: myData.seriesArr
};