Echarts动态加载折线图X Y轴数据图表数据
来源:互联网 发布:淘宝天下视频营销 编辑:程序博客网 时间:2024/05/22 03:51
前几天,收到商家的反馈,希望可以有一个直观的图表,展示一个时间段里的销售额,客数,排班人数,并把销售高峰期以及时间段反应出来。经同事的介绍,选择了百度的 echarts,缩写来自Enterprise Charts,一个纯JavaScript的图表库。上官网查,官方的示例都是死数据。。。废话不多说,直接上代码。
先来一张最终效果图
先看看官方的示例
option = { tooltip: { trigger: 'axis', position: function (pt) { return [pt[0], '10%']; } }, title: { left: 'center', text: '大数据量面积图', }, toolbox: { feature: { dataZoom: { yAxisIndex: 'none' }, restore: {}, saveAsImage: {} } }, xAxis: { type: 'category', boundaryGap: false, data: date }, yAxis: { type: 'value', boundaryGap: [0, '100%'] }, dataZoom: [{ type: 'inside', start: 0, end: 10 }, { start: 0, end: 10, handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', handleSize: '80%', handleStyle: { color: '#fff', shadowBlur: 3, shadowColor: 'rgba(0, 0, 0, 0.6)', shadowOffsetX: 2, shadowOffsetY: 2 } }], series: [ { name:'模拟数据', type:'line', smooth:true, symbol: 'none', sampling: 'average', itemStyle: { normal: { color: 'rgb(255, 70, 131)' } }, areaStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgb(255, 158, 68)' }, { offset: 1, color: 'rgb(255, 70, 131)' }]) } }, data: data } ]};
从官方代码里可以,我们可以提取出 动态加载数据 的项 以及echarts 的初始化
myChart = echarts.init(document.getElementById('main'), 'infographic');//加载了主题 myChart.clear(); option = { tooltip: { trigger: 'axis', axisPointer: { type: 'cross', crossStyle: { color: '#999' } } }, legend: { data: [] }, toolbox: { feature: { dataView: { show: false, readOnly: false }, magicType: { show: true, type: ['line', 'bar'] }, restore: { show: true }, saveAsImage: { show: true } } }, grid: { left: '5%', right: '5%' }, xAxis: [{ type: 'category', boundaryGap: false, axisPointer: { type: 'shadow' }, data: [],// X轴的定义 axisLabel: { interval: 0,//横轴信息全部显示 rotate: -30,//-30度角倾斜显示 } }], dataZoom: [ ], yAxis: [{ type: 'value',// Y轴的定义 min: 0, max: '', interval: '', data: [], axisLabel: { formatter: '{value}' } } , { type: 'value',// Y轴的定义 name:'排班数', }], series: [] }; // 初次加载图表(无数据) myChart.setOption(option);
完成了这一步之后,我们就可以根据自己的实际需要 动态加载数据 能采取的方法有很多 这里我使用的是ajax 请求 的数据
//加载数据 $.ajax({ url: "WebServers/.../GoodsInfo", type: 'post', dataType: 'json', data: { CompanyName: CompanyName, dataOn: check_val },//参数 beforeSend: function () { fnAjaxLoad(true); }, complete: function () { fnAjaxLoad(); }, success: function (data) { jsons = data; loadData(); }, error: function () { alert("数据加载失败!"); } });function loadData() { //折线图 var Item = function () { return { name: '', type: 'line', data: [], yAxisIndex: 0, markArea: { } } }; //柱状图 var Bar = function () { return { name: '', type: 'bar', data: [], yAxisIndex: 1, barWidth: 20, markArea: { } } }; var legends = []; var Series = []; var str; var json = jsons.setData; //console.info(json); var setCol = json[0].setColoer; if (setCol != null && setCol !='') { if (setCol[0].OneStateTime != null && setCol[0].OneStateTime != '') { str = { data: [[{ name: '第一阶段', xAxis: setCol[0].OneStateTime }, { xAxis: setCol[0].OneEndTime }], [{ name: '第二阶段', xAxis: setCol[0].TwoStateTime }, { xAxis: setCol[0].TwoEndTime }]], itemStyle: { normal: { color: setCol[0].setColor } } }; //console.info(str); } } //判断选中的数据类型 if (document.getElementsByName("bm")[0].checked) { for (var i = 0; i < json.length; i++) {var it = new Item(); var bar = new Bar(); it.name = json[i].setName; legends.push(json[i].setName); it.data = json[i].setData; if (i == json.length-1) { bar.name = '排班人数'; legends.push('排班人数'); bar.data = json[0].setHistogram; it.markArea = str; Series.push(bar); } Series.push(it);} } //判断选中的数据类型 if (document.getElementsByName("bm")[1].checked) { for (var i = 0; i < json.length; i++) {var it = new Item(); var bar = new Bar(); it.name = json[i].setName; legends.push(json[i].setName); it.data = json[i].setBare; if (i == json.length - 1) { bar.name = '排班人数'; legends.push('排班人数'); bar.data = json[0].setHistogram; it.markArea = str; Series.push(bar); } Series.push(it);} } //console.info(Series); option.xAxis[0].data = jsons.setXcontent;//控制 显示的Y轴刻度是自适应还是 统一标准 if ($("#CompanyName").val() == '') { option.yAxis[0].max = null; option.yAxis[0].interval = null; } else if (document.getElementsByName("bo")[0].checked) { if (document.getElementsByName("bm")[1].checked) { option.yAxis[0].max = 80; option.yAxis[0].interval = 10; } else { option.yAxis[0].max = 8000; option.yAxis[0].interval = 1000; } option.yAxis[1].max = 80; option.yAxis[1].interval = 10; } else if (document.getElementsByName("bo")[1].checked) { option.yAxis[0].max = null; option.yAxis[0].interval = null; option.yAxis[1].max = null; option.yAxis[1].interval = null; } else if (document.getElementsByName("bm")[1].checked) { option.yAxis[0].max = null; option.yAxis[0].interval = null; } else { option.yAxis[0].max = 8000; option.yAxis[0].interval = 1000; } //console.info(Series); option.legend.data = legends; option.series = Series; // 设置图表 myChart.setOption(option);// 重新加载图表 };//后台数据返回方法代码
[WebMethod] //webservice 方法public void GoodsInfo(){#region 初始化 string setColoer = ConfigurationManager.AppSettings["setColoer"].ToString();//颜色配置项 Search sear = new Search(); List<JsonData> data = new List<JsonData>(); JavaScriptSerializer jss = new JavaScriptSerializer(); bool istrue = false; //控制颜色参数一次 int isone = 1; #endregion #region 接收参数 string CompanyName = HttpContext.Current.Request["CompanyName"]; if(CompanyName != "" && CompanyName!=null) { string[] sArray = CompanyName.Split('('); sear.CompanyName = sArray[1].Replace(")", ""); } sear.dataOn = HttpContext.Current.Request["dataOn"]; #endregion#region 查询//这里就 自由发挥了#endregion//组装数据for (int j = 0; j < dttype.Rows.Count; j++) { JsonData dtInfo = new JsonData(); string seach = dttype.Rows[j]["ProductType2"].ToString(); DataRow[] dr = dt.Select("ProductType2=" + seach); //销售数 decimal[] typedata = new decimal[dr.Length]; //客数 int[] passengers = new int[dr.Length]; //排班人数 模拟数据 decimal[] numPeople = new decimal[dtPai.Rows.Count]; //{100,200,300,400, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };for (int i = 0; i < dr.Length; i++) { typedata[i] = decimal.Parse(Math.Round(decimal.Parse(dr[i]["SalesAmount"].ToString()), 2).ToString());//换算成千 passengers[i] = int.Parse(dr[i]["passengers"].ToString()); } //排班人数 if (j == 0) { for (int k = 0; k < dtPai.Rows.Count; k++) { numPeople[k] = Math.Round(decimal.Parse(dtPai.Rows[k]["PaibanNumber"].ToString()), 2); } dtInfo.setHistogram = numPeople; } dtInfo.setName = dttype.Rows[j]["ProductType2"].ToString(); dtInfo.setData = typedata; dtInfo.setBare = passengers; //判断是否需要查询已配置的商铺 if (!string.IsNullOrEmpty(sear.CompanyName) && isone == 1) { //JsonData dtInfo = new JsonData(); SetBgc bgc = new SetBgc(); List<SetBgc> listCor = new List<SetBgc>(); //判断是否需要查询已配置的商铺 DataTable dtCompany = DbHelp.Query(sqlCom, DabaseEnum.conStrOn).Tables[0]; istrue = IsColumnIncludeData(dtCompany, "FaxId", sear.CompanyName); //判断 该店铺是否需要 显示遮罩层 if (istrue) { DataTable drCompany = DbHelp.Query(sb, DabaseEnum.conStrOn).Tables[0]; bgc.OneStateTime = drCompany.Rows[0]["OneStateTime"].ToString(); bgc.OneEndTime = drCompany.Rows[0]["OneEndTime"].ToString(); bgc.TwoStateTime = drCompany.Rows[0]["TwoStateTime"].ToString(); bgc.TwoEndTime = drCompany.Rows[0]["TwoEndTime"].ToString(); bgc.setColor = setColoer; } listCor.Add(bgc);dtInfo.setColoer = listCor; isone += 1; } data.Add(dtInfo); }#region Y轴 String[] xcontent = new String[24];//同理#endregion#region 响应数据 ResponData tld = new ResponData(); tld.setXcontent = xcontent; tld.setData = data; string strjson = JsonConvert.SerializeObject(tld); HttpContext.Current.Response.Write(strjson); #endregion}使用的类
public class JsonData { //主数据类 public string setName { get; set; }//legend 名称 public decimal[] setData { get; set; }//销售额 public int[] setBare { get; set; }//客数 public List<SetBgc> setColoer { get; set; }//markArea 的颜色 public decimal[] setHistogram { get;set;}// 排班人数 }public class SetBgc {//markArea 需 的范围 public string OneStateTime { get; set; } public string OneEndTime { get; set; } public string TwoStateTime { get; set; } public string TwoEndTime { get; set; } public string setColor { get; set; } }public class ResponData { public List<JsonData> setData { get; set; }public string[] setXcontent { get; set; }}
阅读全文
0 0
- Echarts动态加载折线图X Y轴数据图表数据
- Echarts使用及动态加载图表数据 折线图X轴数据动态加载
- Echarts使用及动态加载图表数据 折线图X轴数据动态加载
- echarts动态加载折线图数据demo
- echarts动态加载折线图数据demo
- echarts折线图,使用ajax动态加载数据
- echarts动态加载数据,显示柱状图,饼图图表
- 使用Echarts图表动态加载饼图数据 pie
- 获取动态数据到echarts-折线图
- ECharts通过Ajax动态加载数据到图表
- echarts动态加载数据
- Echarts动态加载数据
- Echarts 数据统计折线图
- ECharts 多个折线图动态获取json数据
- ECharts 多个折线图动态获取json数据
- HighChart 折线图 动态加载数据
- excel 2010 指定x轴y轴数据 画折线图
- Echarts图表数据动态单位显示
- Spring的@RequestHeader注释
- 鱼眼校正
- 理解Javascript闭包
- HTML5-文字图片轮播-翻牌效果-酒的移动轮播
- javascript Module
- Echarts动态加载折线图X Y轴数据图表数据
- js的ready和onload事件的区别
- Linux-基础-环境安装/目录/基本命令/vi/基本服务配置
- 【CodeForces】598A
- python之元组字典及set类型
- (五)linux下c语言实现在线词典
- 常用的正则表达式 数字 邮箱 电话等
- 算法题/用递归实现一个字符串的全排列
- Unity Shader: Shader粒子广告牌