双Y轴每根柱子宽度不同的显示效果echarts 柱状配置项内容和展示

双Y轴每根柱子宽度不同的显示效果,柱子宽度是计算出来的。这个提供个解决方案

配置项如下
      function numAdd(arg1, arg2){
    var r1, r2, m;
    try {
        r1 = arg1.toString().split(".")[1].length
    } catch (e) {
        r1 = 0
    }
    try {
        r2 = arg2.toString().split(".")[1].length
    } catch (e) {
        r2 = 0
    }
    m = Math.pow(10, Math.max(r1, r2))
    return (arg1 * m + arg2 * m) / m;
}
var mvvChartData = [{
        "brEndTime": 664,
        "brStartTime": 0,
        "volume": 378
    },
    {
        "brEndTime": 1976,
        "brStartTime": 1264,
        "volume": 392
    },
    {
        "brEndTime": 3480,
        "brStartTime": 2704,
        "volume": 396
    },
    {
        "brEndTime": 4836,
        "brStartTime": 4144,
        "volume": 321
    },
    {
        "brEndTime": 6528,
        "brStartTime": 5656,
        "volume": 414
    },
    {
        "brEndTime": 7992,
        "brStartTime": 7240,
        "volume": 382
    },
    {
        "brEndTime": 9496,
        "brStartTime": 8696,
        "volume": 374
    }
]
var max = Math.ceil(mvvChartData[mvvChartData.length - 1].brEndTime / 1000);
var allxPoint = [];

for (var i = '0.0'; i <= max;) {
    allxPoint.push(i);
    i = numAdd(i, 0.1).toFixed(2)
}
var allArr = [];
// 计算梯度线的算法:mvvy = volsum/time*60  volsum:容积累加值 time:最后一个有效点的brStartTime减去第一个有效点brStartTime
var time = Number(mvvChartData[mvvChartData.length - 1].brStartTime) - Number(mvvChartData[0].brStartTime);
var volsum = 0;
var lineArr = []; //梯度线的数据数组
var allArr = [];


mvvChartData.forEach(element => {
    volsum = volsum + Number(element.volume);
    element.volsum = volsum;
    lineArr.push([Number((Number(element.brStartTime) / 1000).toFixed(2)), Number((volsum / time * 60).toFixed(2))])
    // 这里加减0.05是为了优化显示效果,因为每个bar都在在刻度中线显示的两边都会多出来所以需要在显示上去掉两边
    element.brStartTime = Number((Number(element.brStartTime) / 1000 + 0.06).toFixed(2));
    element.brEndTime = Number((Number(element.brEndTime) / 1000 - 0.06).toFixed(2));
    element.volume = Number((Number(element.volume) / 1000).toFixed(2));
    for (var i = element.brStartTime; i <= (element.brEndTime);) {
        allArr.push([i, element.volume]);
        i = numAdd(i, 0.1);
    }
})
lineArr.push([max, Number((volsum / time * 60).toFixed(2))])
option = {
    title: {
        text: '时间容积图',
        textStyle: {
            fontSize: 12,
            fontWeight: 'normal',
        }
    },
    legend: {
        show: true,
        orient: 'vertical',
        right: 0,
        top: 30,
        itemGap: 4,
        selected: true,
        data: []
    },
    grid: {
        top: '45px',
        right: '70px',
        bottom: '50px',
    },
    xAxis: {
        min: 0,
        max: 10, //自定义个最大值,后面还会从新计算的
        interval: 1, //隔几显示一个刻度
        // splitNumber: 10,//分割段数
        boundaryGap: false, //x轴从0开始到结束显示
        onZero: true,
        name: '时间[S]',
        position: 'bottom',
        nameGap: 5, //轴名字距离轴距离
        splitLine: {
            show: false,
        },
        axisLabel: {
            showMinLabel: true,
            showMaxLabel: true,
            //如果图表高度固定的话可以设置一个的固定值显示在零刻度线下面
            // margin:'10',
        },
        axisTick: {
            show: true, //显示刻度线
            inside: false, //刻度线在下面
        },
        show: true,
    },
    yAxis: [{
            min: 0,
            max: 6,
            type: 'value',
            axisLabel: {
                show: true, //显示刻度值
                showMinLabel: true,
                showMaxLabel: true
            },
            interval: 1,
            // splitNumber: 12,
            axisTick: {
                show: true,
                inside: false
            },
            name: '容积[L]',
            splitLine: {
                show: false
            },
            show: true,
        },
        {
            min: 0,
            max: function(e) {
                if (e.max <= 120) {
                    return 120;
                } else {
                    return Math.ceil(e.max / 10) * 10;
                }
            },
            type: 'value',
            axisLabel: {
                show: true, //显示刻度值
                showMinLabel: false,
                showMaxLabel: true
            },
            interval: 20,
            // splitNumber: 6,
            axisTick: {
                show: true, //显示刻度
                inside: false //刻度向内向外
            },
            name: 'MVV[L/min]',
            splitLine: {
                show: false
            },
            show: true,
        }
    ],
    series: [{
            type: 'bar',
            //  barWidth: '10%',//暂时这个后面会从新计算柱子的宽度
            barWidth: ((allArr.length / (max * 10) * 100) + 10).toFixed(1) + '%', //暂时这个后面会从新计算柱子的宽度
            barGap: '0%',
            barCategoryGap: '0%',
            data: allArr,
            itemStyle: {
                normal: {
                    // color: "#000"//因为只有一个结果选中所以默认给个选中的蓝色吧
                    color: '#4e66a6',
                }
            },
            silent: true, //图形是否不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件。
            yAxisIndex: 0, //指定使用第一个y轴
        },
        {
            type: 'line',
            step: 'end',
            symbol: 'none',
            itemStyle: {
                normal: {
                    // color: "#000",
                    color: '#4e66a6',
                    lineStyle: {
                        width: 1,
                    }
                }
            },
            data: lineArr,
            yAxisIndex: 1, //指定使用第二个y轴
        },
    ]
};
    
截图如下