Echars 动态生成数据与为0的数据不显示(折线图)

1、贴个效果图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMDU4MzIx,size_16,color_FFFFFF,t_7020190912090700265.png

2、讲个 自己的小思路: 准备自己统计的数据: 如下图(代码很简单):

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMDU4MzIx,size_16,color_FFFFFF,t_70

// 首先我们需要一个data
// data里面需要什么数据?
// 1、每日的日期 2、每日日期对应的商品名称 3、每日日期对应的商品名称销售总数量
// 比如:
//     goodsName        days            count
//     老干妈            2019-01-01      17
//     摇摇冻            2019-01-01      20
//     老干妈            2019-01-02      10
//     摇摇冻            2019-01-02      8
// 有了这个data 是不是可以开始做事了?

var totalGoodsSalesPie = echarts.
    init(document.getElementById('totalGoodsSales'), 'shine');

// 获取到后台传过来的数据
var data = null;
$.ajax({
    url: '/*****e/pa*****er/totalGoodsSales',
    type: 'post',
    async: false,
    data: {isBulk: _isBluk, deviceNo: _totalGoodsDeviceNumber},
    dataType: 'json',
    success: function (res) {
        if (res != null && res.length != 0) {
            for (let i = 0; i < res.length; i++) {
                // 所有的商品名称
                _good_name.push(res[i].goods_name);
                // 所有的日期
                _days.push(res[i].days)
            }
            data = res;
        }
    }
})

// 用数组接受商品名称 和 日期
var _good_name = [], _days = [];
_good_name = removeRepeatArrElement(_good_name);
_days = removeRepeatArrElement(_days);
// 数组去重复
function removeRepeatArrElement(arr){
    var newArr = [];
    var len = arr.length;
    for(var i=0; i<len; i++){
        if(newArr.indexOf(arr[i]) == -1){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

/************* 下面要开始动态生成seriesName 和 data  ***************/
// 动态生成商品名称
var _seriesArr = [], _series = {};
for (let i = 0; i < _good_name.length; i++) {
    _series = {
        name: _good_name[i],
        type: 'line', // line 为折线图
        smooth: true,
        data:[]
    }
    // 生成每种商品每天的销售量
    var _sales = [];
    var goodsName = _good_name[i];
    for (let j = 0; j <  _days.length; j++) {
        var toDay = _days[j];
        var quantity = ruleOut(toDay, goodsName);
        _sales.push(quantity);
    }
    // 把当前商品对应的数据添加进去
    _series.data = _sales;
    _seriesArr[i] = _series;
}

// 通过时间和商品名称  返回哪天某种商品的销量   没有则返回0
function ruleOut(toDay, goodsName) {
    var lastData = 0;
    for (let i = 0; i < data.length; i++) {
        if (toDay == data[i].days && goodsName == data[i].goods_name) {
            lastData = data[i].quantity;
        }
    }
    return lastData;
}
// 其实这就应该拿到所有的商品和商品对应的数据了,下面只做一下数据处理了

option = {
    title: {
        // text: '日销售统计',
        subtext: '件/克',
    },
    tooltip : {
        trigger: 'axis',
        axisPointer: {
            type: 'cross',
            label: {
                backgroundColor: '#6a7985'
            }
        },
        // 进行数据处理
        formatter: function (params) {
            var html = '';
            if (params.length != 0) {
                // 对应x轴的时间数据  也就是2019-01-01
                // 可以自己打印一下console.info(params[0]);
                var getName = params[0].name;
                html += getName + '<br/>';
                for (let i = 0; i < params.length; i++) {
                    // 如果为0 为空的数据我们不要了
                    if (params[i].value != null && params[i].value != 0 
                        && params[i].value != '') {
                        // params[i].marker 需要加上,否则你鼠标悬浮时没有样式了
                        html += params[i].marker;
                        html += params[i].seriesName + ':' + params[i].value + '<br/>';
                    }
                }
            }
            return html;
        }
    },
    grid: {
        left: '3%',
        right: '4%',
        bottom: '2%',
        containLabel: true
    },
    toolbox: {
        feature: {
            saveAsImage: {}
        }
    },
    xAxis: {
        // name: '日期',
        type: 'category',
        boundaryGap: false,
        data: _days
    },
    yAxis: {
        type: 'value'
    },
    // 动态生成的数据
    series: _seriesArr
};
// end 结束 配置

if (option && typeof option === "object") {
    totalGoodsSalesPie.setOption(option, true);
}

 3、有些人可能动态生成数据那里会看蒙、 那就先把动态生成商品名称先弄出来,先不管数据,名称出来后再看每种商品每天的销售量;

 

 

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cocosum

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值