错6笔记

 找回密码
 立即注册
查看: 35|回复: 0

echars 瀑布图 怎样从正值降到负值,而不是从0降到负

[复制链接]

182

主题

238

帖子

1111

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1111
发表于 2020-3-6 17:19:25 | 显示全部楼层 |阅读模式

亲,您还没有注册哦,错6笔记愿与你结交好友,享用更多功能,让你轻松玩转社区,快来注册吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
[JavaScript] 纯文本查看 复制代码
var titleStyle = {
    fontSize: 14
};
var subjectsData = {
    "yearMonth": "2018年1-7月",
    "xData": [
        "指标1",
        "指标2",
        "指标3",
        "指标4",
        "指标5",
        "指标6",
        "指标7",
        "指标8",
        "指标9",
        "指标10",
        "指标11",
        "指标12",
        "指标13",
        "指标14",
        "指标15",
        "指标16"
    ],
    "yData": [74756, -15424, -119416, 2558, 615, 7997, -15708, -29782, 2848, -7974, -5777, -7055, -4145, 13120, 6490, 4571]
}

var myJson = [];
var updata = [];
var downdata = [];
var auxdata = []; //辅助1的数据,存放每个堆子的总数
var auxdataDown = []; //支出的辅助数据,当堆子跨y轴的正负区域的时候做的辅助
var auxdataUp = []; //支出的辅助数据,当堆子跨y轴的正负区域的时候做的辅助
formatStackData(subjectsData, myJson, updata, downdata, auxdata, auxdataDown, auxdataUp)

option = {
    title: {
        text: subjectsData.yearMonth + '财务费用',
        left: 'center',
        textStyle: titleStyle
    },
    toolbox: {
        feature: {
            saveAsImage: {
                show: true
            }
        }
    },
    tooltip: { //提示框组件
        trigger: 'axis',
        axisPointer: { // 坐标轴指示器,坐标轴触发有效
            type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
        },
        formatter: function(params) {
            var tar;
            var tar2;
            if (params[3].value != '-') {
                tar = params[3]; //收入
            } else {
                tar = params[4]; //支出
            }
            var str;
            for (var i = 0; i < myJson.length; i++) {
                if (tar.name === myJson[i].xData) {
                    str = Math.abs(tar.value) + Math.abs(myJson[i].auxdataDown) + Math.abs(myJson[i].auxdataUp);
                }
            }
            return tar.name + '<br/>' + tar.seriesName + ' : ' + str;
        }
    },
    legend: {
        data: ['收入', '支出'],
        selectedMode: false, //禁用点击图表改变显示状态
        left: 10,
        top: 18
    },
    grid: {
        left: '1%',
        right: '4%',
        bottom: '3%',
        containLabel: true
    },
    xAxis: {
        type: 'category',
        splitLine: {
            show: false
        },
        axisLabel: {
            rotate: 40
        },
        data: subjectsData.xData
    },
    yAxis: {
        type: 'value',
        splitLine: {
            show: false
        }
    },
    series: [{
            name: '辅助', //辅助1是总量数据,将主要柱状图按堆叠位置开始展示
            type: 'bar',
            stack: '总量',
            itemStyle: {
                normal: {
                    color: 'rgba(0,0,0,0)'
                },
                emphasis: {
                    show: false
                }
            },
            data: auxdata
        },
        {
            name: '支出辅助', //支出辅助是当支出跨越y轴的正负轴的时候做的辅助
            type: 'bar',
            stack: '总量',
            itemStyle: {
                normal: {
                    color: '#FF0033'
                },
                emphasis: {
                    show: false
                }
            },
            data: auxdataDown
        },
        {
            name: '收入辅助', //收入辅助是当收入跨越y轴的正负轴的时候做的辅助
            type: 'bar',
            stack: '总量',
            itemStyle: {
                normal: {
                    color: '#33CC33'
                },
                emphasis: {
                    show: false
                }
            },
            data: auxdataUp
        },
        {
            name: '收入',
            type: 'bar',
            stack: '总量',
            itemStyle: {
                normal: {
                    color: '#33CC33'
                }
            },
            label: {
                normal: {
                    show: true,
                    position: 'top',
                    formatter: function(params) {
                        return formatNormal(params, myJson);
                    }
                }
            },
            data: updata
        },
        {
            name: '支出',
            type: 'bar',
            stack: '总量',
            itemStyle: {
                normal: {
                    color: '#FF0033'
                }
            },
            label: {
                normal: {
                    show: true,
                    position: 'bottom',
                    formatter: function(params) {
                        return formatNormal(params, myJson);
                    }
                }
            },
            data: downdata
        }
    ]
};
//构造各个指标的数据
function formatStackData(subjectsData, myJson, updata, downdata, auxdata, auxdataDown, auxdataUp) {
    var myData = subjectsData.yData;
    var xData = subjectsData.xData;
    var sum = 0;
    for (var i = 0; i < myData.length; i++) {
        var sign = sum + myData[i];
        if (sign > 0) {
            if (myData[i] > 0) {
                if (sum < 0) {
                    //这种情况的时候柱子要从负数跨到正数,收入的时候会出现的情况,所以是收入辅助存放sum,其余辅助存放0
                    updata.push(sign);
                    auxdataUp.push(sum);
                    auxdataDown.push(0);
                    auxdata.push(0);
                } else {
                    updata.push(myData[i]);
                    auxdataUp.push(0);
                    auxdataDown.push(0);
                    auxdata.push(sum);
                }
                downdata.push('-');
            } else {
                auxdata.push(sign);
                updata.push('-');
                downdata.push(Math.abs(myData[i]));
                auxdataDown.push(0);
                auxdataUp.push(0);
            }
        } else {
            if (myData[i] > 0) {
                auxdata.push(sign);
                updata.push(-myData[i]);
                downdata.push('-');
                auxdataDown.push(0);
                auxdataUp.push(0);
            } else {
                updata.push('-');
                if (sum > 0) {
                    //这种情况的时候柱子要从正数跨到负数,支出数据的情况,所以这时候是支出辅助存放sum,其余辅助存放0
                    downdata.push(sign);
                    auxdataDown.push(sum);
                    auxdataUp.push(0);
                    auxdata.push(0);
                } else {
                    downdata.push(myData[i]);
                    auxdataDown.push(0);
                    auxdataUp.push(0);
                    auxdata.push(sum);
                }
            }
        }
        sum = sum + myData[i];

        //将各个分离的指标整理成json放入myJosn中
        var a = {
            xData: xData[i],
            auxdata: auxdata[i],
            auxdataUp: auxdataUp[i],
            auxdataDown: auxdataDown[i],
            updata: updata[i],
            downdata: downdata[i]
        };
        myJson.push(a);
    }
}
//控制数字显示的值
function formatNormal(params, myJson) {
    var str;
    for (var i = 0; i < myJson.length; i++) {
        if (params.name === myJson[i].xData) {
            str = Math.abs(params.value) + Math.abs(myJson[i].auxdataDown) + Math.abs(myJson[i].auxdataUp);
        }
    }
    return str;
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|错6笔记 ( 辽ICP备18006810号 )

GMT+8, 2024-4-26 01:02 , Processed in 0.244507 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表