Echart绘制趋势图和柱状图总结
1.legend名字与series名字一样,即可联动,且不可手动去掉联动效果
2.通过legend图例联动,隐藏绘制图线后,对应( yAxisIndex: 1)坐标y轴如果没有同时设置min和max的情况下,会自动隐藏。
3.grid可以通过设置x、y等为百分比达到自适应效果。
4.隐藏部分图线时,tooltip显示有格式要求时,通过给tooltip的formatter传递函数处理。
echart绘制图线实现代码:
var modalChart = null;
function createModalTrend(convertedData) {
if(convertedData && convertedData[0] && convertedData[1] && convertedData[2]){
//有数据情况下
$("#serviceTrendChart").attr('class','box');
var modalOption = {
legend:{
orient:'horizontal',
show:true,
x:'center',
y:'bottom',
data: ['数','率']
},
title:{
x:'center',
show:true,
text:'' ,
textAlign:'center',
textStyle:{
fontSize:14
}
},
backgroundColor: '#ffffff',
tooltip: {
formatter: function (params,ticket,callback) {
var res = params[0].name + '<br>';
for (var i = 0; i < params.length; i++) {
if(params[i].seriesName == '数'){
res += "数:" + params[i].value + '<br>';
}
if(params[i].seriesName == '率'){
res += "率:" + params[i].value + '%<br>';
}
}
return res;
},
trigger: 'axis',
backgroundColor: 'rgba(250,250,250,0.7)',// 悬浮框的颜色
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'line', // 默认为直线,可选为:'line' | 'shadow'
lineStyle: { // 直线指示器样式设置
color: '#D6D7D7',// 纵向竖虚线的颜色
type: 'dashed'
},
crossStyle: {
color: 'rgba(250,190,31,0.7)'
},
shadowStyle: { // 阴影指示器样式设置
color: 'rgba(250,190,31,0.7)'
}
},
textStyle: {
color: 'rgba(0,0,0,0.7)'// 悬浮框内容的颜色
}
},
// calculable: false,
grid: {
x:'10%',
y: '18%',
x2:'10%',
y2:'28%',
borderWidth: 1,
borderColor: '#D6D7D7'
},
xAxis: [
{
axisLabel: {
show: true,
rotate: 0,
interval: 'auto',
onGap: true
},
axisTick: {
show: false,
inside:false
},
type: 'category',
splitLine: {
show: false
},
boundaryGap: true,
data: convertedData[0],
axisLine: {
show: true,
lineStyle: {
width: 1,
color: '#F0F0F0'
}
},
nameTextStyle: {
color: '#000000',
fontStyle: 'normal',
fontWeight: 'normal',
fontFamily: 'sans-serif',
fontSize: 12
}
}
],
yAxis: [
{
min:0,
type: 'value',
position:'left',
splitArea: {
show: false
},
splitNumber: 5,
boundaryGap: [
0,
0.2
],
axisLine: {
show: true,
lineStyle: {
width: 1,
color: '#D6D7D7'
}
},
axisLabel: {
formatter: '{value}'
}
},
{
max:100,
type: 'value',
position:'right',
splitArea: {
show: false
},
splitNumber: 5,
boundaryGap: [
0,
0.2
],
axisLine: {
show: true,
lineStyle: {
width: 1,
color: '#D6D7D7'
}
},
axisLabel: {
formatter: '{value}%'
}
}
],
color:['#9AD0E2','#FAC026'],
series: [
{
name: '数',
type: 'bar',
smooth: true,
clickable: false,//设置为不可以点击
showAllSymbol: true,
data: convertedData[1]
},
{
name: '率',
type: 'line',
symbol:'circle',
smooth: true,
clickable: false,//设置为不可以点击
showAllSymbol: true,
yAxisIndex: 1,
data: convertedData[2]
}
]
};
if(modalChart && modalChart.clear && modalChart.setOption){
//有数据且已经被初始化过
modalChart.clear();//clear清空了option
modalChart.setOption(modalOption);
}else{
//有数据未被初始化
modalChart = echarts.init(document.getElementById('serviceTrendChart'));
modalChart.setOption(modalOption);
}
}else{
//无数据情况下
if(modalChart && modalChart.clear) modalChart.clear();//被初始化过,清空
$("#serviceTrendChart").attr('class','box nodataModal');
}
}
function genModalTrend(flag) {
var theFlag = '0' + flag;
var datatrend = null;
var url = xxxxx;
var endTime = condition.time;//暴露给外部,发请求直接用time,内部计算用 condition.selectedTime
var beginTime = getStartTime(condition.selectedTime,condition.timeUnit);
var para = [
{"name": "provincecode", "value": condition.provincecode},
{"name": "citycode", "value": condition.citycode},
{"name": "districtcode", "value": condition.districtcode},
{"name": "beginTime", "value": beginTime},
{"name": "endTime", "value": endTime},
{"name":"unit","value":condition.timeUnit},
{"name":"flag","value":theFlag}
];
$.ajax({
type: "GET",
contentType: "application/json",
url: url,
data: rdkData(para),
// async: false, //必须同步,还是可以异步,放到回调函数里面做?
success: function (data) {
datatrend = eval("(" + data.result + ")");
var convertedData = convertModalData(datatrend, endTime, condition.timeUnit);
createModalTrend(convertedData);
if (modalChart && modalChart.resize) {
modalChart.resize();
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
createModalTrend(null);
// var fakeData = [['2016-07-04',32,98.5],['2016-07-07',88,52.2],['2016-07-08',100,40],['2016-07-14',111,2]];
// createModalTrend(convertModalData(fakeData,endTime,condition.timeUnit));
}
});
}
function convertModalData(reqData, endDate, timeUnit) {
if (reqData == null || reqData.length == 0) {
return null;
}
var num = 0;
var k = 0;
var arrData = [];
arrData[0] = [];//日期
arrData[1] = [];//数
arrData[2] = [];//率
switch (timeUnit) {
case 'day':
num = 30;
for (k = 0; k <= num; k++) {
arrData[1][k] = 0;//数
arrData[2][k] = 0;//率
arrData[0][k] = getPreDay(endDate, num-k);//日期初始化,从小到大
}
break;
case 'week':
num = 7;
for (k = 0; k <= num; k++) {
arrData[1][k] = 0;//数
arrData[2][k] = 0;//率
arrData[0][k] = getPreWeek(endDate, num-k);//日期初始化
}
break;
case 'month':
num = 11;
for (k = 0; k <= num; k++) {
arrData[1][k] = 0;//数
arrData[2][k] = 0;//率
arrData[0][k] = getPreMonth(endDate, num-k);//日期初始化
}
break;
default :
return null;
break;
}
/** 趋势图数据数量[0,num] **/
//数据reqData没有按日期从小到大排列
for(k=0;k<=num;k++){
for (var i = 0; i < reqData.length; i++){
//如果日期对的上
if (reqData[i] && reqData[i][0] && arrData[0][k] === reqData[i][0]){
if(reqData[i][1] && parseFloat(reqData[i][1])){
//reqData[i][0]//如果数有效
arrData[1][k] = reqData[i][1];
}
if(reqData[i][2] && parseFloat(reqData[i][2])){
// reqData[i][1]//如果率有效
arrData[2][k] = reqData[i][2];
}
}
}
}
return arrData;
}
时间处理函数:
function getTimeStr(dateObj){
var strYear = dateObj.getFullYear();
var strMonth = dateObj.getMonth() + 1;
if (strMonth < 10) {
strMonth = '0' + strMonth;
}
var strDay = dateObj.getDate();
if (strDay < 10) {
strDay = '0' + strDay;
}
return strYear + '-' + strMonth + '-' + strDay;
}
/**以参数dateString为基准,前days天的日期**/
function getPreDay(dateString, days) {
if(days === 0) return dateString;
if (dateString.split('-').length != 3) return '';
var result = dateString.replace(/-/g, '/');
var theMiliseconds = Date.parse(result);
var pre_milliseconds = theMiliseconds - 1000 * 60 * 60 * 24 * parseInt(days);
var preDate = new Date(pre_milliseconds);
var strPreDate = getTimeStr(preDate);
return strPreDate;
}
/**若粒度为周,则显示最近8周内的趋势,weeks传入7。周基于天计算,传入dateString必须为天形式,dateString应该为selectedTime **/
function getPreWeek(dateString, weeks) {
if (dateString.split('-').length != 3) return '';//dateString应该传入selectedTime
var strPreDate = getPreDay(dateString, weeks * 7);
var checkDate = new Date(strPreDate.replace(/-/g, '/'));
checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
var time = checkDate.getTime();
checkDate.setMonth(0);
checkDate.setDate(1);
var week = Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; //86400000即一天的毫秒数
var timeText = checkDate.getFullYear() + "-" + (week < 10 ? '0' : '') + week;
return timeText;
}
/**若粒度为月,则显示12月内的趋势,months传入11 **/
function getPreMonth(dateString, months) {
if(months === 0) return dateString;
if (dateString.split('-').length != 2) return;
var y = Math.round(months / 12); //满12月减一年
var m = months % 12;
var result = dateString.split('-');
var theYear = parseInt(result[0]);
var theMonth = parseInt(result[1]);
if (theMonth <= m) {
theYear = theYear - 1 - y;
theMonth = theMonth + 12 - m;
} else
{
theYear = theYear - y;
theMonth = theMonth - m
}
if (theMonth <= 9) {
theMonth = '0' + theMonth;
}
return theYear + '-' + theMonth;
}
/**针对天周月,求趋势图 开始时间
* 30天
* 8周
* 12月
* **/
function getStartTime(endTime,timeUnit) {
switch (timeUnit){
case 'day':
return getPreDay(endTime,30);//起始日期为[前30天,endTime] 共31天
break;
case 'week':
return getPreWeek(endTime,7);//共八周
break;
case 'month':
return getPreMonth(endTime,11);//共12月
break;
default :
return endTime;
}
}
Echart绘制趋势图和柱状图总结的更多相关文章
- Excel应该这么玩——7、我是预言家:绘制趋势图
让我们先看一个场景:你是公司销售部的员工,你手里有公司最近几年的销售额相关的数据,经理希望你预测下个月的销售额.盯着一堆数据,你或许会想到画一张XY坐标图,然后将每个月份的销售额标定为一个坐标.但是下 ...
- python3 读取txt文件数据,绘制趋势图,matplotlib模块
python3 读取txt文件数据,绘制趋势图 test1.txt内容如下: 时间/min cpu使用率/% 内存使用率/% 01/12-17:06 0.01 7.61 01/12-17:07 0.0 ...
- OpenGL(十七) 绘制折线图、柱状图、饼图
一.绘制折线图 glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j])函数可以绘制GLUT位图字符,第一个参数是GLUT中指定的特定字形集,第二个参数是要写 ...
- SpringMVC框架下使用jfreechart绘制折线图,柱状图,饼状图
java代码 @Controller public class CityAction { @Autowired private CityBiz cityBiz; //柱状图 @RequestMappi ...
- 用python绘制趋势图
import matplotlib.pyplot as plt #plt用于显示图片 import matplotlib.image as mping #mping用于读取图片 import date ...
- 【开源】专业K线绘制[K线主副图、趋势图、成交量、滚动、放大缩小、MACD、KDJ等)
这是一个iOS项目雅黑深邃的K线的绘制. 实现功能包括K线主副图.趋势图.成交量.滚动.放大缩小.MACD.KDJ,长按显示辅助线等功能 预览图 最后的最后,这是项目的开源地址:https://git ...
- DevExpress使用之ChartControl控件绘制图表(多坐标折线图、柱状图、饼状图)
最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下. DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图.饼状图.柱 ...
- DevExpress 折线图和柱状图的绘制与数据绑定
DevExpress 组件是一个非常丰富和强大的组件,适合各种可视化图形的绘制与展示,在数据分析展示中是个很有帮助的,网上也有很多关于这方面的文章,关于折线图或柱状图的画法,以下是自己在工作中接触到的 ...
- 用python做自己主动化測试--绘制系统性能趋势图和科学计算
在性能測试中.我们常常须要画出CPU memory 或者IO的趋势图. 预计大学里.大多数人都学习过matlib, 领略了matlib绘图的强大. python提供了强大的绘图模块matplotlib ...
随机推荐
- Mac和Windows中常见中文字体的英文名称
我们在给HTML元素设置字体的时候经常会有类似 “ font-family:"微软雅黑", "黑体" ” 这样的写法,尤其是在使用Dreamweaver.Apt ...
- 如何获取控件id,包名,类名
- Qt编写守护程序保证程序一直运行(开源)
没有任何人敢保证自己写的程序没有任何BUG,尤其是在商业项目中,程序量越大,复杂度越高,出错的概率越大,尤其是现场环境千差万别,和当初本地电脑测试环境很可能不一样,有很多特殊情况没有考虑到,如果需要保 ...
- C# HTTPServer和OrleansClient结合
using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using ...
- JavaScript面向对象之闭包的理解
首先了解一下什么是闭包,闭包是一个函数,通常被称为闭包函数或者绑定函数,该函数运行在一个特殊的环境里,该环境定义了一些本地变量,当该函数被调用时,仍可以使用这些本地变量. 当一个函数在不位于它所处的环 ...
- mysql缓存分析
- WinAPI Hook
1.抢先load 需要hook的dll,替换需要hook的函数的地址, 2.调用堆栈信息的获取: 3.内存信息的统计: 4.如何统计已经free掉的内存? 5.如何批量注入程序load的dll? IA ...
- 什么是渲染目标(render target)&& 渲染到纹理(Render To Texture, RTT)详解
渲染到纹理(Render To Texture, RTT)详解 RTT是现在很多特效里面都会用到的一项很基本的技术,实现起来很简单,也很重要.但是让人不解的是网上搜索了半天只找到很少的文章说这个事儿, ...
- 《Mysql ALTER基本操作》
一:ALTER 添加单列 - 语法 - ALTER TABLE 表名 ADD 列名 定义类型 [FIRST(列将加入最上方) | AFTER 字段名(列加入某某字段之后) ] - 示例 `user` ...
- Appium环境配置(一)
一:环境准备(Windows 7版本 64位系统) 1.jdk1.6.0 (64位) 2.android-sdk 3.appium 4.Node.js:node-v8.11.1 5.Appium-Py ...