Toggle navigation
excel流程配置echart
By
水***尘
2020-03-02 08:49:11
脚本
16
21
作品使用的第三方脚本
https://www.echartsjs.com/zh/dist/echarts-gl.min.js
数据管理
上传数据
支持小于 5M 任意格式(csv, xlsx, json, xml, ...)的数据文件
上传后可以通过生成的文件链接异步获取托管的数据。
历史数据
0 条
无历史数据
代码修改记录
信息提示
保存作品
对当前截图不满意?你还可以
上传本地截图
重新截图
作品名称
作品描述
标签
geo
grid
legend
markLine
markPoint
bar
effectScatter
line
lines
map
timeline
title
toolbox
tooltip
visualMap
作品默认版本
最新
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
20:11:45
图表已生成
整理代码
刷新
代码
var data = [ { name: "Mon_1", time: "Mon", tdCount: 820, ydCount: 810, cost: 0.2, count: 800 }, { name: "Tue_1", time: "Tue", tdCount: 932, ydCount: 800, cost: 0.3, count: 850 }, { name: "Wed_1", time: "Wed", tdCount: 901, ydCount: 880, cost: 0.4, count: 900 }, { name: "Thu_1", time: "Thu", tdCount: 934, ydCount: 900, cost: 0.1, count: 950 }, { name: "Fri_1", time: "Fri", tdCount: 1290, ydCount: 1200, cost: 0.2, count: 1000 }, { name: "Sat_1", time: "Sat", tdCount: 1330, ydCount: 1400, cost: 0.6, count: 1050 }, { name: "Sun_1", time: "Sun", tdCount: 1320, ydCount: 1410, cost: 0.7, count: 1100 }, ]; //1-one 2-two 3-three 4-four 5-five 6-six 7-seven 8-eight 9-nine 10-ten var conf = { type: "bar",//图表类型: line,bar/ybar,pie,radar,bar3D,Candlestick typeNum: "1",// 图类型编号:line:1~6,bar:1~3,pie:1~4,radar:1~4,bar3D:1~2;[更改数据展示:曲线_柱状图(数据堆叠,以百分比显示;曲线_平滑显示),饼图(圆环,玫瑰图等)] layoutNum: "1",//图表布局编号:line/bar:1~7,pie:1~4,radar:1~4,bar3D:1~4;[更改位置:标题位置,图例位置,表格,坐标轴名称] styleNum: "1",//图表样式编号:1~4;[更改颜色] xkey: "time",//x轴的数据key,[pie图,xkey值为ykey值名称,可无] ykey: ["tdCount", "ydCount"],//y轴数据key,[pie图,ykey只能有一个且为数值] textObj: {//更改:标题,系列名 title: "", //标题名 seriesNm: { tdCount: "", ydCount: "" }//系列名[line:key根据ykey确定;pie系列名不可修改] } } var option = getEchartOpt(data, conf); function getEchartOpt(data, conf) { var sType = conf.type;//图类型 var typeNum = conf.typeNum;//类型编号 var layoutNum = conf.layoutNum;//布局编号 var styleNum = conf.styleNum;//样式编号 var xkey = conf.xkey;//x轴key var ykey = conf.ykey;//y轴key var xType = conf.xType || 'category';//x轴数据类型:category,time,value;或者通过data判断得出(isNum,new Time()?) var textObj = conf.textObj;//标题名,系列名 //数据渲染 var series = getSeries(sType, data, xkey, ykey); console.log("series", series); var opt = getOptTpl(sType, data, xType); //类型编号:opt-series setTypeNum(sType, typeNum, opt, series); //布局编号:opt-series setLayoutNum(sType, layoutNum, opt, series); //样式编号:opt setStyleNum(sType, styleNum, opt); //标题名,系列名等修改 setTextNm(sType, textObj, opt, series); //数据合并 opt.series = series; console.log("opt", opt); return opt; } //获取option模版 function getOptTpl(sType, data, xType) { if (sType === "line" || sType === "bar") { var option = { title: { text: '图表标题', }, legend: { }, dataset: { source: data }, series: [], tooltip: { trigger: 'axis', axisPointer: { type: 'cross', label: { backgroundColor: '#6a7985' } } }, xAxis: { type: xType, axisLine: { lineStyle: { color: '#999', } } }, yAxis: { type: 'value', axisLine: { lineStyle: { color: '#999', } }, splitLine: {} } }; } else if (sType === "ybar") { var option = { title: { text: '图表标题', }, legend: { }, dataset: { source: data }, series: [], tooltip: { trigger: 'item' }, yAxis: { type: xType, axisLine: { lineStyle: { color: '#999', } } }, xAxis: { type: 'value', axisLine: { lineStyle: { color: '#999', } }, splitLine: {} } }; } else if (sType === "pie") { var option = { title: { text: '图表标题', }, legend: { }, dataset: { source: data }, series: [], tooltip: { trigger: 'item' } } } else if (sType === "radar") { var option = { title: { text: '图表标题' }, tooltip: {}, legend: {}, radar: { // shape: 'circle', indicator: [] }, series: [] } } else if (sType === "bar3D") { var option = { title: { text: "图表标题" }, tooltip: {}, legend: {}, xAxis3D: { type: xType, axisLine: { lineStyle: { color: '#999', } } }, yAxis3D: { name: "",//默认Y,不显示 type: 'category', axisLine: { lineStyle: { color: '#999', } } }, zAxis3D: { type: 'value', }, grid3D: { }, series: [{ type: 'bar3D', // stack: "堆叠", data: [["a", "", 1], ["b", "", 2], ["c", "", 3]] }, { type: 'bar3D', // stack: "堆叠",//堆叠 data: [["a", "", 2], ["b", "", 3], ["c", "", 4]] }] } } return option; } //获取series:添加nameKey function getSeries(sType, data, xkey, ykey) { var allSeries = []; if (sType === "line" || sType === "bar") { //多个系列 for (var i = 0; i < ykey.length; i++) { var yField = ykey[i]; allSeries.push({ name: yField,//'系列名' extraYkey: yField,//匹配需要修改的系列名 type: sType, label: {}, encode: { x: xkey, y: yField }//dataset,数据映射 }); } } else if (sType === "ybar") { //多个系列 for (var i = 0; i < ykey.length; i++) { var yField = ykey[i]; allSeries.push({ name: yField,//'系列名' extraYkey: yField,//匹配需要修改的系列名 type: "bar", label: {}, //数据反过来映射 encode: { x: yField, y: xkey }//dataset,数据映射 }); } } else if (sType === "pie") { var yField = ykey[0];//只取第一个 var defSeries = { name: '', type: 'pie', radius: '65%', center: ['50%', '50%'], encode: { value: yField, itemName: xkey } } allSeries.push(defSeries); } else if (sType === "radar") { var defSeries = { type: "radar", data: [] }; // 获取雷达指示器名称 var nameObj = {}; for (var i = 0; i < ykey.length; i++) { var yField = ykey[i]; var dataObj = ({ name: yField,//'系列名' extraYkey: yField,//匹配需要修改的系列名 value: [] }); for (var j = 0; j < data.length; j++) { var dataRow = data[j]; var yval = dataRow[yField] || 0;//y轴,无数据,赋默认值0 var name = dataRow[xkey]; dataObj.value.push(yval); //指示器的最大值 if (nameObj[name] == undefined) { nameObj[name] = 0; } if (nameObj[name] < yval) { nameObj[name] = yval; } } defSeries.data.push(dataObj); } //雷达图的指示器,max*1.1倍 var indicator = []; for (var nm in nameObj) { indicator.push({ name: nm, max: Number(nameObj[nm] * 1.1) }) } defSeries.indicator = indicator; allSeries.push(defSeries); } else if (sType === "bar3D") { // bar3D的series.data在setTypeNum时生成 for (var i = 0; i < ykey.length; i++) { var yField = ykey[i]; var defSeries = { name: yField,//'系列名' extraYkey: yField,//匹配需要修改的系列名 extraXkey: xkey, type: 'bar3D', label: {}, data: [] } allSeries.push(defSeries); } } return allSeries; } //类型编号:series[sobj.stack,sobj.smooth];opt[tooltip.trigger] function setTypeNum(sType, typeNum, opt, series) { if (sType === "line") { // 1:数据实际效果展示,2:堆叠,3:面积; // 456对应123的基础上,曲线变成_平滑显示 if (typeNum === "2") { series.forEach(function (sobj) { sobj.stack = "堆叠";//多个系列,x轴相同,y数据值叠加后显示;只有一个系列,类型编号无意义 }); } else if (typeNum === "3") { series.forEach(function (sobj) { sobj.areaStyle = {};//面积:区域填充样式 }); } else if (typeNum === "4") { series.forEach(function (sobj) { sobj.smooth = true; }); } else if (typeNum === "5") { series.forEach(function (sobj) { sobj.stack = "堆叠";//多个系列,数据值叠加后显示 sobj.smooth = true; }); } else if (typeNum === "6") { series.forEach(function (sobj) { sobj.areaStyle = {};//面积 sobj.smooth = true; }); } //百分比:一个系列:基准线100%,无意义;两个系列:系列1每个点/系列2每个点;只有一个系列,类型编号无意义 } else if (sType === "bar"||sType==="ybar") { //柱状图修改tip类型 opt.tooltip.trigger = "item"; // 1:数据实际效果展示,2:堆叠,3:条形图_横向展示(xy互换); if (typeNum === "2") { series.forEach(function (sobj) { sobj.stack = "堆叠";//多个系列,x轴相同,y数据值叠加后显示;只有一个系列,类型编号无意义 }); } } else if (sType === "pie") { // 1:扇形面积:展现数据的大小 // 2:圆环展示_圆环面积展示数据大小 // 3:扇区圆心角展现数据的百分比,半径展现数据的大小。roseType:'radius' // 4:所有扇区圆心角相同,仅通过半径展现数据大小。'area' if (typeNum === "2") { //https://gallery.echartsjs.com/editor.html?c=xG61SsUMJi series.forEach(function (sobj) { sobj.radius = ['25%', '70%']; }); } else if (typeNum === "3") { series.forEach(function (sobj) { sobj.roseType = 'radius'; }); } else if (typeNum === "4") { series.forEach(function (sobj) { sobj.roseType = 'area'; }); } } else if (sType === "radar") { //指示器 opt.radar.indicator = series[0].indicator; delete series[0].indicator; //1:默认:绘制类型_多角形 //2:面积:区域填充样式 //3:节点放大,正方形展示; //4:绘制类型:圆形,移除分割线 if (typeNum === "2") { series.forEach(function (sobj) { sobj.areaStyle = {}; }); } else if (typeNum === "3") { series.forEach(function (sobj) { sobj.symbol = "rect"; sobj.symbolSize = 10; }); } else if (typeNum === "4") { opt.radar.splitLine = { show: false }; opt.radar.shape = 'circle' //支持 'polygon' 和 'circle' } } else if (sType === "bar3D") { // 1:默认正常3D状态 // 2:堆叠显示:tootip提示y:"",z是每一项数据,无总和 if (typeNum === "1") { series.forEach(function (sobj) { var yField = sobj.extraYkey; var xkey = sobj.extraXkey; for (var j = 0; j < data.length; j++) { var dataRow = data[j]; var yval = dataRow[yField] || 0;//无数据,赋默认值0 var name = dataRow[xkey]; sobj.data.push([name, yField, yval]); } }) } else if (typeNum === "2") { series.forEach(function (sobj) { sobj.stack = "堆叠"; var yField = sobj.extraYkey; var xkey = sobj.extraXkey; for (var j = 0; j < data.length; j++) { var dataRow = data[j]; var yval = dataRow[yField]||0; var name = dataRow[xkey]; sobj.data.push([name, "", yval]);//y轴相同 } }) } else if (typeNum === "3") { } } } //布局编号:opt[title.left/top/show,legend,yAxis];series[sobj.label] function setLayoutNum(sType, layoutNum, opt, series) { if (sType === "line" || sType === "bar" || sType === "ybar") { //1默认:title:top-0,left-0;legend:top-0,left-center;顶左-顶中 if (layoutNum === "2") {//顶中-右中_垂直 1 // opt.title.top = ""; opt.title.left = "center"; opt.legend.right = "0"; opt.legend.top = "center"; opt.legend.orient = "vertical";//horizontal,vertical } else if (layoutNum === "3") {//顶中-顶(下)中-y无 2 opt.title.left = "center"; opt.legend.top = "6%";//title下 opt.legend.left = "center"; opt.yAxis.show = false; } else if (layoutNum === "4") {//顶中-底中-y_轴线无 3 opt.title.left = "center"; opt.legend.bottom = "0"; opt.legend.left = "center"; opt.yAxis.axisLine.show = false; } else if (layoutNum === "5") {//无-底中-y_分割线无 4 opt.title.left = "center"; opt.legend.bottom = "0"; opt.legend.left = "center"; opt.yAxis.splitLine.show = false; //跳过excel布局:表格5,6,7 } else if (layoutNum === "6") {//无-底中-y无-折线_值标注 8 opt.title.show = false; opt.legend.bottom = "0"; opt.legend.left = "center"; opt.yAxis.show = false; series.forEach(function (sobj) { sobj.label = { show: true } }); } else if (layoutNum === "7") {//无-无-xy无 11 opt.title.show = false; opt.legend.show = false; opt.xAxis.show = false; opt.yAxis.show = false; } } else if (sType === "pie" || sType === "radar") { if (layoutNum === "2") {//顶中-右中_垂直 opt.title.left = "center"; opt.legend.right = "0"; opt.legend.top = "center"; opt.legend.orient = "vertical";//horizontal,vertical } else if (layoutNum === "3") {//顶中-顶(下)中 opt.title.left = "center"; opt.legend.top = "6%";//title下 opt.legend.left = "center"; } else if (layoutNum === "4") {//中中-中中 opt.title.x = 'center'; opt.title.y = 'center'; } } else if (sType === "bar3D") { if (layoutNum === "2") {//顶中-右中_垂直 opt.title.left = "center"; opt.legend.right = "0"; opt.legend.top = "center"; opt.legend.orient = "vertical";//horizontal,vertical } else if (layoutNum === "3") {//顶中-顶(下)中 opt.title.left = "center"; opt.legend.top = "6%";//title下 opt.legend.left = "center"; } else if (layoutNum === "4"){ series.forEach(function (sobj) { sobj.label = { show: true } }); } } } //样式编号:opt[color] function setStyleNum(sType, styleNum, opt) { // if (sType === "line" || sType === "bar" || sType === "pie" || sType === "ybar" || sType === "radar") { var styleObj = {// 颜色模版 //0,echart默认的 "1": ["#f845f1", "#ad46f3", "#5045f6", "#4777f5", "#44aff0", "#45dbf7", "#f6d54a", "#f69846", "#ff4343"], "2": ['#afa3f5', '#00d488', '#3feed4', '#3bafff', '#f1bb4c', "red", "blue"], "3": ['#eb2100', '#d0570e', '#d0a00e', '#34da62', '#00e9db', '#00c0e9', '#0096f3', '#33CCFF', '#33FFCC', '#eb3600'], "4": ["#8d7fec", "#5085f2", "#e75fc3", "#f87be2", "#f2719a", "#fca4bb", "#f59a8f", "#fdb301", "#57e7ec", "#cf9ef1", "#57e7ec", "#cf9ef1"], } // } else if (sType === "radar") { // } var styleTpl = styleObj[styleNum]; if (styleTpl != undefined) { opt.color = styleTpl; } } //文本名修改:opt[title.text];series[sobj.name] function setTextNm(sType, textObj, opt, series) { //对象合并:assign_谷歌45+ // var textObj=Object.assign({ title: "", seriesNm: {} }, textObj); if (isObject(textObj) == false) { return false; } //修改标题 var title = textObj.title; if (isNonEmptyStr(title)) { opt.title.text = title; } //修改系列名 if (sType === "line" || sType === "bar" || sType === "ybar" || sType === "bar3D") {//pie未处理 var seriesNm = textObj.seriesNm || {}; for (k in seriesNm) { var name = seriesNm[k]; if (isNonEmptyStr(name)) { //break series.forEach(function (sobj) { if (sobj.extraYkey === k) { sobj.name = name; } }); } } } } function isNonEmptyStr(str) { return typeof str === "string" && str.length > 0; } //判断是否是对象 function isObject(pm) { return Object.prototype.toString.call(pm) === "[object Object]"; } /* //dataset方式:key值为null,"",但不能没有key //tooltip写在series里>option里 //提取 var fnTpl = function (sobj) { sobj.stack = "堆叠";//多个系列,数据值叠加后显示 } series.forEach(fnTpl) //标注点/线:最大值/最小值,指定值? markPoint: { data: [ {type: 'max', name: '最大值'} ], animationDelay: 2000, animationDuration: 1000 }, // areaStyle: {},//区域填充样式 //颜色来源 https://gallery.echartsjs.com/editor.html?c=xHkjKKrz_M "#f845f1","#ad46f3","#5045f6","#4777f5","#44aff0","#45dbf7","#f6d54a","#f69846","#ff4343" https://gallery.echartsjs.com/editor.html?c=xG61SsUMJi var colorList=['#afa3f5', '#00d488', '#3feed4', '#3bafff', '#f1bb4c']; https://gallery.echartsjs.com/editor.html?c=xhmv-1o6XS var myColor = ['#eb2100', '#eb3600', '#d0570e', '#d0a00e', '#34da62', '#00e9db', '#00c0e9', '#0096f3', '#33CCFF', '#33FFCC']; https://gallery.echartsjs.com/editor.html?c=xbMIK6kQkR "#8d7fec","#5085f2","#e75fc3","#f87be2","#f2719a","#fca4bb","#f59a8f","#fdb301","#57e7ec","#cf9ef1","#57e7ec","#cf9ef1" // 第1 first 1st,第2 second 2nd,第3 third 3rd,第4 fourth 4th,第5 fifth 5th, // 第6 sixth 6th,第7 seventh 7th,第8 eighth 8th,第9 ninth 9th,第10 tenth 10th, */