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 ...
随机推荐
- 如何在Django1.8 结合Python3.4版本中使用MySql
Python2.7时代连接MySql的MySQLdb还不支持Python3.4. pip install pymysql 最关键的一点,在站点的__init__.py文件中,我们添加如下代码: 1 i ...
- Fiddler 使用命令行
在 Fiddler 界面左下角处,可以输出一些快捷命令,常用的快捷命令如下: help:查看命令帮助cls:清屏,即清空会话列表中的所有会话select:选择某一类型的会话,如 select html ...
- Redis JdkSerializationRedisSerializer,stringRedisSerializer,ProtoBuf 体积,性能简单比较.
/** * User: laizhenwei * Date: 2018-04-10 Time: 14:17 * Description: */ @RunWith(SpringRunner.class) ...
- FileInputFormat看这一段源码
这是FileInputFormat中的一个方法,看一下它的功能,多看源码,理解hadoop,同时提高自己的java编程能力: private static String[] getPathString ...
- TOP100summit【分享实录-网易】构建云直播分发网络
本篇文章内容来自2016年TOP100summit网易视频云.网易杭州研究院服务端技术专家邵峰的案例分享.编辑:Cynthia 邵峰:网易视频云.网易杭州研究院服务端技术专家浙江大学计算机专业博士毕业 ...
- 学习 rostopic
rostopic pub可以把数据发布到当前某个正在广播的话题上. rostopic pub [topic] [msg_type] [args] 示例 $ rostopic pub - /turtle ...
- ArcGIS API for JavaScript
以3.14版本为例: 1.部署环境: 下载:https://developers.arcgis.com/downloads/apis-and-sdks?product=javascript# 部署:h ...
- [cloud][sdn] LBaaS/neutron / Octavia
清晰/浅显: http://www.cnblogs.com/sammyliu/p/4656176.html IBM:写的一般般,价值不大 https://www.ibm.com/developerwo ...
- [nginx] 从源码编译安装NGINX
nginx通过rpm包进行的安装和配置: [web][nginx] 初识nginx -- 使用nginx搭建https DPI解码测试环境 现在,要通过源码进行安装. 参考:https://nginx ...
- [daily][centos][nginx] 在centos7使用nginx启用对文件目录的http访问
1. 安装nginx yum install nginx 2. 修改配置 2.1 提供目录权限: 我需要访问的目录是 /home/data, 用户是data, 所以修改如下配置: [root@S205 ...