设备异常时间统计

描述:当前是关于Echarts图表中的 柱状图 示例。
 
            /************************************************
 * 机器出现故障的时间段,Y轴代表小时数,X代表异常机器
 ************************************************/
var xAxis = ['机器A','机器B','机器C','机器D'];
var minHour = 0;
var maxHour = 24;
//模拟数据,一个开始时间,对应一个结束时间.
var hourData = [
        [[3,10]],//机器A 3点钟开始异常,10点维修完成
        [[6,8],[11,13],[20,24]],
        [[10,15]],
        [[5,10]]
    ];

//補缺空擋數據
var maxColumn = 0;//最大列
for (var i in hourData) {
    var array = hourData[i];
    var addCount = 0;//新增計數器,因每次新增后,數組長度都會實時變化
    for (var j in array) {
        if (j == 0 && array[j][0] > minHour) {
            array.unshift([0,(array[j][0]-minHour),-1]);
            addCount++;
        } else if(j > 0){
            var newJ = parseInt(j)+addCount;
            var currentStart = array[newJ][0];
            var currentEnd = array[newJ][1];
            var beforeEnd  = array[newJ-1][1];
            if (beforeEnd!=currentStart) {
                array.splice(newJ,0,[beforeEnd,currentStart,-1]);
                addCount++;
            }
        }
    }
    if (maxColumn < array.length) {
        maxColumn = array.length;
    }
}

//初始化每层的数据,默认空
var seriesArray = [];
var seriesBlank = [];//保存需要透明的下標
for (var i = 0;i<maxColumn;i++) {
    var arrayTemp = [];
    var arrayBlankTemp = [];
    for (var j in hourData) {
        var array = hourData[j][i];
        if (!!array) {
            var s = hourData[j][i][0];
            var e = hourData[j][i][1];
            arrayTemp.push(e-s);
            if (!!hourData[j][i][2] && hourData[j][i][2] == -1) {
                arrayBlankTemp.push('透明');
            } else {
                arrayBlankTemp.push('非透明');
            }
        } else {
            arrayTemp.push(0);
            arrayBlankTemp.push('透明');
        }
    }
    seriesArray.push(arrayTemp);
    seriesBlank.push(arrayBlankTemp);
}


//生成圖表
var series = [];
for (var i in seriesArray) {
    series.push({
        name:'DownTime',
        type:'bar',
        stack:'DownTime',
        data:seriesArray[i],
        barWidth:5,
        color:function(param){
            var blankValue = seriesBlank[param.seriesIndex][param.dataIndex];
            if (!!blankValue && blankValue == '透明') {
                return 'rgba(128, 128, 128, 0)';
            }
            return '#EB4742';
        }
    });
}

option = {
    title: {
        text: 'DownTime',
        textStyle: {
            color: '#707070',
            fontSize:'12',
            fontWeight:'normal'
        }
    },
    grid: {
        top:'30',
        left: '0',
        right: '0',
        bottom: '0',
        containLabel: true
    },
    xAxis : [
        {
            type : 'category',
            data : xAxis
        }
    ],
    yAxis : [
        {
            type : 'value',
            min:minHour,
            max:maxHour
        }
    ],
    series : series
};