echarts 拼图和折线图的封装 及常规处理

1.html

<div id="wrap"></div>

2.js

; (function ($) {
    $.fn.extend({
        echartsPie: function (obj) {
            // 默认配置
            var defaultConfig = {
                id: this.attr("id"),
                color: [‘#2ba4db‘, ‘#5172bf‘, ‘#935ebf‘, ‘#c654a2‘, ‘#54b9cd‘],
                legend: {
                    icon: "circle",
                    orient: "vertical",
                    xy: ["60%", "20%"], //控制图例位置
                    color: "#83868d"
                },
                noData: {
                    mainTitle: "无统计数据",
                    subTitle: "以下为模拟效果数据",
                    x: "center"
                },
                series: {
                    type: ‘pie‘,
                    radius: [‘50%‘, ‘70%‘], //控制内圆半径:默认为0,即实心圆.
                    center: [‘30%‘, ‘50%‘],
                    startAngle: 0
                },
                tooltip: {
                    trigger: ‘none‘,
                    showContent: false
                },
                defaultData: [{
                    value: 30,
                    name: ‘电影院‘
                }, {
                    value: 30,
                    name: ‘KTV‘
                }, {
                    value: 40,
                    name: ‘餐饮‘
                }]
            };
            var actConfig = $.extend(true, {}, defaultConfig, obj);

            // 数据处理
            if (actConfig.data.length) {
                actConfig.noData.mainTitle = "";
                actConfig.noData.subTitle = "";
            } else {
                actConfig.data = actConfig.defaultData;
            };
            var compoundObj = getData(actConfig.data);
            var proportionArr = proportion(compoundObj.vals);
            var isAllZero=allZero(compoundObj.vals);
            var legendData = [];
            $.each(compoundObj.labels, function (i, v) {
                var curObj = {};
                curObj.name = v;
                curObj.icon = actConfig.legend.icon;
                legendData.push(curObj);
            });
            var option = {
                title: {
                    text: actConfig.noData.mainTitle,
                    subtext: actConfig.noData.subTitle,
                    x: actConfig.noData.x
                },
                tooltip: {
                    trigger: actConfig.tooltip.trigger,
                    showContent: actConfig.tooltip.showContent,
                },
                color: actConfig.color,
                legend: {
                    orient: actConfig.legend.orient,
                    x: actConfig.legend.xy[0],
                    y: actConfig.legend.xy[1],
                    itemWidth: 14,
                    itemHeight: 14,
                    textStyle: {
                        fontSize: 14,
                        color: actConfig.legend.color,
                    },
                    itemGap: 30,
                    formatter: function (name) {
                        if(isAllZero){
                            return "0.00%  "+ name;
                        };
                        var str = mapArr(name, compoundObj.labels, proportionArr);
                        var spaceStr = addSpace(str, proportionArr) + "  ";
                        return "  " + mapArr(name, compoundObj.labels, proportionArr) + "%" + spaceStr + name;
                    },
                    data: legendData
                },
                calculable: false,
                series: [{
                    name: ‘‘,
                    type: actConfig.series.type,
                    // silent: true,
                    // hoverAnimation: false,
                    radius: actConfig.series.radius,
                    center: actConfig.series.center,
                    itemStyle: {
                        normal: {
                            label: {
                                show: false
                            },
                            labelLine: {
                                show: false
                            }
                        },
                        emphasis: {
                            label: {
                                show: false,
                                position: ‘inner‘,
                                formatter: "{b}({c})\n{d}%"
                            }
                        }
                    },
                    data: compoundObj.objSrc
                }]
            };
            // api 调用
            var myChart = echarts.init(document.getElementById(actConfig.id));
            myChart.showLoading({
                text: "图表数据正在努力加载...",
                effect: ‘whirling‘,
                textStyle: {
                    fontSize: 20
                }
            });
            myChart.setOption(option);
            myChart.hideLoading();
            return this;
        },
        echartsLine: function (obj) {
            // 默认配置
            var defaultConfig = {
                id: this.attr("id"),
                color: ["#79be56", "#935ebf", "#c654a2"],
                type: "line",
                grid: [80, 60, 80, 60],
                noData: {
                    mainTitle: "无统计数据",
                    subTitle: "以下为模拟效果数据",
                    x: "center"
                },
                defaultData: [{
                    data: [397, 2096, 396],
                    name: "认证人次",
                    date: [‘6/12‘, ‘7/12‘, ‘8/12‘]
                }, {
                    data: [1097, 2046, 3096],
                    name: "上网人次"
                }, {
                    data: [97, 2006, 196],
                    name: "短信量"
                }]
            };
            var actConfig = $.extend(true, {}, defaultConfig, obj);

            // 数据处理
            if (actConfig.data.length) {
                actConfig.noData.mainTitle = "";
                actConfig.noData.subTitle = "";
            } else {
                actConfig.data = actConfig.defaultData;
            };
            var compoundObj = getDataLine(actConfig.data);
            var seriesConfig = [];
            $.each(actConfig.data, function (i, v) {
                var middle = {};
                middle.name = actConfig.data[i].name;
                middle.type = actConfig.type;
                middle.symbol = ‘emptyCircle‘;
                middle.legendHoverLink = false;
                middle.smooth = false;
                middle.symbolSize = 3;//拐点大小
                middle.itemStyle = {
                    normal: {
                        color: actConfig.color[i],
                    },
                    emphasis: {
                        color: actConfig.color[i],
                    }
                };
                middle.data = actConfig.data[i].data;
                seriesConfig.push(middle);
            });

            var option = {
                // title: {
                //     text: actConfig.noData.mainTitle,
                //     subtext: actConfig.noData.subTitle,
                //     x: actConfig.noData.x
                // },
                tooltip: {
                    trigger: ‘axis‘,
                    backgroundColor: "rgba(50,50,50,0)",
                    axisPointer: {
                        type: ‘none‘
                    },
                    formatter: function (params) {
                        return tooltipFormat(params);
                    }
                },
                legend: {
                    data: compoundObj.labels,
                    // padding:50,  //设置图例内间距
                    textStyle: {
                        fontSize: 14,
                        color: "#83868d",
                    },
                },
                grid: {
                    borderWidth: 0,
                    x: actConfig.grid[0], //坐标轴与容器左侧间距,字符串格式设置百分比:"6%"
                    y: actConfig.grid[1],
                    x2: actConfig.grid[2],
                    y2: actConfig.grid[3]
                },
                calculable: false,
                xAxis: [{
                    type: ‘category‘,
                    data: actConfig.data[0].date.map(function (str) {
                        return str.replace(‘ ‘, ‘\n‘)
                    }),
                    splitLine: {
                        show: false  //控制网格线是否显示
                    },
                    axisPointer: {
                        type: ‘none‘
                    },
                    axisTick: {
                        show: false  //刻度线是否显示
                    },
                    splitArea: {
                        show: false, //分隔区域
                    },
                    axisLine: {
                        lineStyle: {
                            color: "#D7D7D7",
                        }
                    },
                    axisLabel: {
                        color: ‘#000‘,
                    },
                }],
                yAxis: [{
                    type: ‘value‘,
                    splitLine: {
                        show: true  //控制网格线是否显示
                    },
                    axisTick: {
                        show: false  //刻度线是否显示
                    },
                    splitArea: {
                        show: false,  //分隔区域
                    },
                    axisLine: {
                        lineStyle: {
                            color: "#D7D7D7",
                        }
                    },
                    axisLabel: {
                        color: ‘#000‘,
                    },
                }],
                series: seriesConfig
            };
            var myChart = echarts.init(document.getElementById(actConfig.id));
            myChart.showLoading({
                text: "图表数据正在努力加载...",
                effect: ‘whirling‘,
                textStyle: {
                    fontSize: 20
                }
            });
            myChart.setOption(option);
            myChart.hideLoading();
        }
    });

    //饼图
    //全零判断
    function allZero(arr){
        var m=0;
        for(var i=0,j=arr.length;i<j;i++){
            if(arr[i]==0){
                m++;
            }
        }
        return m==j;
    }
    // arr 求和
    function sumArr(arr) {
        var num = 0;
        for (var i = 0, j = arr.length; i < j; i++) {
            num = num + (arr[i] - 0);
        }
        return num;
    }

    // 获取占比
    function proportion(arr) {
        var arrBack = [];
        for (var i = 0, j = arr.length; i < j; i++) {
            var current = ((arr[i] - 0) / sumArr(arr) * 100 - 0).toFixed(2);
            arrBack.push(current);
        }
        return arrBack;
    }

    // 关联两个等长数组:通过一个数组的值获取另一个数组对应位置的值
    function mapArr(val, arr, arrTo) {
        for (var i = 0, j = arr.length; i < j; i++) {
            if (val == arr[i]) {
                return arrTo[i];
            }
        }
    }

    // 对齐效果:补空格
    function addSpace(str, arr) {
        var space = "";
        var len = 1;
        for (var m = 0, n = arr.length; m < n; m++) {
            if (arr[m].length >= len) {
                len = arr[m].length;
            }
        }
        for (var m = 0; m < len - str.length; m++) {
            space = space + "  ";
        }
        return space;
    }

    // 返回一个复合对象包含 labels、vals、映射 name > val、自身
    function getData(obj) {
        var compoundObj = {};
        compoundObj.labels = [];
        compoundObj.vals = [];
        compoundObj.objMap = {};
        compoundObj.objSrc = obj;
        $.each(obj, function (i, v) {
            compoundObj.labels.push(v.name);
            compoundObj.vals.push(v.value);
            compoundObj.objMap[v.name] = v.value;
        });
        return compoundObj;
    }

    // 折线图
    function tooltipFormat(obj) {
        var str = ‘<div style="padding-left:10px;width:200px;height:20px;font-size:14px;background-color:#54b9cd;color:#fff;">‘
            + obj[0].name
            + ‘</div>‘
            + ‘<div style="width:200px;border:1px solid #54b9cd;background-color:#fff;">‘;
        $.each(obj, function (i, v) {
            str = str
                + ‘<p>‘
                + ‘<span style="margin-left:10px;margin-right:10px;font-size:12px;color:#9299a1;">‘
                + v.seriesName
                + ‘:</span>‘
                + ‘<span style="font-size:14px;font-weight:700;color:#54b9cd;">‘
                + v.value
                + ‘</span>‘
                + ‘</p>‘;
        });
        str = str + ‘</div></div>‘;
        return str;
    }

    // 返回一个复合对象包含 dates、vals、labels
    function getDataLine(obj) {
        var compoundObj = {};
        compoundObj.labels = [];
        compoundObj.vals = [];
        compoundObj.dates = [];
        compoundObj.objSrc = obj;
        $.each(obj, function (i, v) {
            compoundObj.labels.push(v.name);
            compoundObj.vals.push(v.value);
            compoundObj.dates.push(v.date);
        });
        return compoundObj;
    }

})(jQuery);

2.1 使用

success: function (result) {
            var config = {
                        data: [{
                            data: result.statValue[1],
                            name: "name1",
                            date: result.statDate
                        }, {
                            data: result.statValue[0],
                            name: "name2"
                        }, {
                            data: result.statValue[2],
                            name: "name3"
                        }]
                    };
                    $("#wrap").echartsLine(config);
}                
            success: function (data) {
                var config = {
                    data: []
                };
                $.each(data, function (i, v) {
                    var medium = {};
                    medium.name = v.name;
                    medium.value = v.avgNetTime;
                    config.data.push(medium);
                });
                $("#wrap").echartsPie(config);
            }
            success: function (data) {
                var config = {
                    data: [],
                    color: [‘#54b9cd‘, ‘#5172bf‘, ‘#935ebf‘, ‘#c654a2‘],
                    series: {
                        radius: "70%",
                        startAngle: 270
                    },
                    defaultData: [{
                        value: 30,
                        name: ‘name1‘
                    }, {
                        value: 30,
                        name: ‘name2‘
                    }, {
                        value: 40,
                        name: ‘name3‘
                    }]
                };
                $.each(data, function (i, v) {
                    var medium = {};
                    medium.name = v.authTypeName;
                    medium.value = v.authSuccessCount;
                    config.data.push(medium);
                });
                $("#wrap").echartsPie(config);
            }

3.参考网址

原文地址:https://www.cnblogs.com/justSmile2/p/10284219.html

时间: 2024-10-09 23:32:57

echarts 拼图和折线图的封装 及常规处理的相关文章

百度推出的echarts,制表折线图柱状图饼图等的超级工具

一.简介: 1.绘制数据图表,有了它,想要网页上绘制个折线图.柱状图,从此easy. 2.使用这个百度的echarts.js插件,是通过把图片绘制在canvas上在显示在页面上. 官网对echarts的简介: ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRen

js 在echarts多条折线图数字*100 诡异出现小数

formatter:function(params){ //数据单位格式化 var relVal = params[0].name; //x轴名称 for (var i = 0, l = params.length; i < l; i++) { if(params[i].value){ relVal += '<br/> ' + params[i].seriesName + ' : ' + (params[i].value*100+"%"; } } console.lo

Echarts生成饼状图、条形图以及线形图 JS封装

1.在我们开发程序中,经常会用到生成一些报表,比方说饼状图,条形图,折线图等.不多说了,直接上封装好的代码,如下Echarts.js所示 以下代码是封装在Echarts.js文件中 /** * Created by Administrator on 2015/8/7. */ var charec; // 路径配置 require.config({ paths: { echarts: 'http://echarts.baidu.com/build/dist' } }); // 按需加载所需图表 r

echarts 动态生成多条折线图和动态获得x轴并于数字相对应

function drawZXT(id, data) {    myChart = echarts.init(document.getElementById(id));    option = {        title: {            text: '流量计折线图',            //subtext: '纯属虚构'        },        tooltip: {            trigger: 'axis',            axisPointer:

实现Echarts折线图的虚实转换

需求:医院的体温单,在统计体温时,对于正常情况下统计的体温数据,需要显示实线:对于进行物理降温后统计的体温数据,需要显示虚线. 现有的体温单是运用 Echarts 折线图,统一用实线显示.因此在这基础上进行的优化.主要的解决思路是:实线和虚线重叠,需要用虚线显示的部分,实线的data设置为 '-'. 1 { 2 name: '温度(°C)', 3 type: 'line', 4 stack: '温度1', 5 itemStyle: { 6 normal: { 7 lineStyle: { //系

echarts折线图动态改变数据时的一个bug

echarts折线图中当增加dataZoom,修改start大于0的时候,会出现折线混乱,变成竖直的线,绘制有问题. 解决方法,在dataZoom中增加filterMode: 'empty' http://gallery.echartsjs.com/editor.html?c=xS1T_X893l&v=2

深入浅出ECharts系列 (二) 折线图

深入浅出ECharts系列(二) 目标 本次教程的目标是实现“折线图堆叠”折线,实现结果如图: 2. 准备工作 a)         首先下载ECharts插件,你可以根据自己的实际需求选择你想要下载的版本,也可以自己定制相应功能的版本,下面附上插件的下载地址: http://echarts.baidu.com/download.html 我们下载完整版为大家进行演示. 3. 正式开始 首先,我新建了一个MVC4项目,将下载的文件放到对应的位置: 然后新建一个控制器和对应的视图,添加对文件的引用

echarts 折线图点击高亮

echarts中注册事件很多 ,记录下今天做的折线图点击高亮: 查了api,看了半天,发现折线图点击时只能做到圆点变大,并不能实现点击线条,整条线条高亮,也真是醉了. 上图: 如图所示,只能圆点变大... 贴出代码: function chartModule () { var self = this; var myChart = null; var prevIndex = null; this.init = function () { myChart = echart.init(document

使用Echarts几分钟制作出折线图、饼图、柱状图等

ECharts,缩写来自Enterprise Charts. ECharts,不仅是国内关注度最高的开源项目,还是中国第一个也是目前唯一一个入选了Github Explorer Data Visualization板块的开源项目.这里咱们结合上篇提到的Bootstrap简单栅格框架,来做一个小小的布局.学以致用嘛.从来不喜欢赘述,直接上代码,一切的解释,请看代码注释: <script type="text/javascript" src="js/jquery.min.j