缘起

  

ECharts,缩写来自Enterprise Charts,商业级数据图表,它最初是为了满足公司商业体系里各种业务系统(如凤巢、广告管家等等)的报表需求。以前这些系统的图表需求我们都是使用flash去实现的,百度分工很细,有专门的flash组同学去做这个事情,这就不可避免多了一个沟通环节,作为前端工程师无法独立掌控,不管是数据接口的设计,个性化的需求都得沟通商定。而且一个系统内会有很多个flash在不同场景下出现,他们并没有实现通用。加上乔帮主不让i系列上运行flash以及html5的火热,我们需要寻求一个解决方案。于是在2012年初,当时还是凤巢前端技术负责人的Kener-林峰在凤巢数据平台项目中尝试使用Canvas去做图表,他写了一个全新的轻量级Canvas类库ZRender,那可以说是ECharts的原型,虽然跟现在已经相去十万八千里了。

  百度资深前端Erik回归后组建起了百度商业前端通用技术组,在前面提到的背景下加上前端团队的经理祖明的强力支持,数据可视化成为了通用技术里一个重要的研究方向, 林峰也就这样顺理成章的从凤巢技术负责人转到现在的角色,百度商业前端数据可视化团队负责人。痴狂于web3d的技术天才沈毅,沉迷图形图像的杨骥,有SVG/GUI实战经验的宿爽,对颜色如数家珍的陈怀木等等来自一线的工程师加入组建起了可视化团队。

  正如前面提到的,ECharts来自ZRender,那时的ZRender是包含图表功能的,甚至拖拽重计算已经在那个时候被实现了,但各种图表数据逻辑与图形渲染耦合,非模块化,Demo时随心所欲的特殊定制,我们意识到这是一个糟糕的设计。ZRender做了第一次大规模的重构,抽离了一切图表相关功能,纯粹的作为底层Canvas类库使用。

  而被抽离的图表逻辑构建成为ECharts 0.1版本,但基本仍旧属于Demo状态,因为接口不规范,个性化能力和通用性都太差了。Erik和林峰,以及3位来自Flash组的资深工程师(百度商业系统中多年来所做的各种flash图表基本出自他们或者是他们所带领的团队),花了近2个月时间先后开了6次会议终于制定并发布了百度图表库标准1.0版本。这份标准是在几乎没考虑实现成本的情况下制定的,追求设计的合理、高度个性化的扩展能力,可想而知,这是给团队挖了一个很深很深的坑,在紧接着的近10个月时间里ECharts团队就是看着文档一步一步从这个坑里爬出来。

  幸运的是我们真爬出来了,2013年6月30,ECharts发布了1.0版本,这份标准完全成为了ECharts 1.0的API文档,而且我们还加入了更多的数据交互能力。虽然这份标准目前已经成为了ECharts文档的子集了,但它的重要性不容置疑,回过头看这段历程,我们衷心的感谢制定这份标准的5位工程师(林峰、赵庶、Erik、刘阳、杨冬),在我们看来接口设计的合理比起实现成本重要得多。

基本使用

  

<html >
<head><script src="jquery.min.js"></script>
<script src="echarts.js"></script>
</head>
<body >
<div id="mainBar" style="width: 100%; height:40%;border:1px solid #ccc;padding:10px;"></div>
<button onclick="return onButtonClick()">点击显示</button>
</body>
<script>
//ECharts.init(document.getElementById('mainBar')); function onButtonClick() {
console.log(ECharts)
var options = {
title : {
text: '某地区蒸发量和降水量',
subtext: '纯属虚构'
},
tooltip : {
trigger: 'axis'
},
legend: {
data:['蒸发量','降水量']
},
toolbox: {
show : true,
feature : {
mark : {show: true},
dataView : {show: true, readOnly: false},
magicType : {show: true, type: ['line', 'bar']},
restore : {show: true},
saveAsImage : {show: true}
}
},
calculable : true,
xAxis : [
{
type : 'category',
data : ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
}
],
yAxis : [
{
type : 'value'
}
],
series : [
{
name:'蒸发量',
type:'bar',
data:[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
markPoint : {
data : [
{type : 'max', name: '最大值'},
{type : 'min', name: '最小值'}
]
},
markLine : {
data : [
{type : 'average', name: '平均值'}
]
}
},
{
name:'降水量',
type:'bar',
data:[2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
markPoint : {
data : [
{name : '年最高', value : 182.2, xAxis: 7, yAxis: 183, symbolSize:18},
{name : '年最低', value : 2.3, xAxis: 11, yAxis: 3}
]
},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
}
}
]
};
ECharts.init(document.getElementById('mainBar')).setOption(options);
}
</script>
</html>

  

讲解

当页面加载的看到的 如果不先执行这段代码

ECharts = ec;
ECharts.init(document.getElementById('mainBar')).setOption(options);

而执行这段代码

var myChart = ECharts.init(document.getElementById('mainBar'));
myChart.setOption(options);

图表是不会出现的

注意)因为是什么呢?

通过console.log(ECharts) 打印,是出不来的,这样说明的就是,初始时同步并没有赋值

所以需要在回调方法里面初始话

require(
[
'echarts',
'echarts/chart/bar',
'echarts/chart/line',
'echarts/chart/map'
],
function (ec) {
//将对象保存下来
ECharts = ec;
ECharts.init(document.getElementById('mainBar')).setOption(options);
//--- 折柱 ---
//var myChart = ec.init(document.getElementById('mainBar'));
//myChart.setOption(options);
}
);

 

ECharts 初体验的更多相关文章

  1. ECharts初体验

    ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等) ...

  2. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

  3. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  4. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  5. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  6. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  7. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  8. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  9. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

随机推荐

  1. IOS开发的基础知识

    1.为什么对一个变量release后还要设为nil 对一个变量release后,这个变量指向的内存释放了,但这个变量本身没变,仍指向原来的内存地址.若这个变量在释放后被访问,或者被重复release, ...

  2. [WCF编程]10.操作:单向操作

    一.单向操作概述 WCF提供了单向操作,一旦客户端调用,WCF会生成一个请求,但没有相关的应答信息返回给客户端.所以,单向操作是不能有返回值,服务抛出的任何异常都不会传递给客户端. 理想情况下,一旦客 ...

  3. 使用block进行界面之间的反向传值

    目标:在两个独立的控制器的界面之间进行反向传值 关键技术:block 代码编写及运行环境:Xcode6.4 / 模拟器8.4 语言:Objective-C 注:使用纯代码实现,不使用xib/story ...

  4. python基础之面向对象高级编程

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个"函数"供使用(可以讲多函数中公用的变量封装到对象中) ...

  5. js中兼容性问题的封装(能力检测)

    所谓兼容性,就是看浏览器是否支持当前对象的属性或是方法,先通过获得页面文本内容的方式来了解兼容性,并封装函数或对象以解决此类问题. 获得页面文本内容的方式:innnerText 或textConten ...

  6. sharepoint2013爬xls文件:Error initializing IFilter for extension的解决方案

    最近sharepoint2013爬网出现: error initializing IFilter for extension '.xls' (Error code is 0x80030002). Th ...

  7. SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search

    1. Ensure your site or shared folder in one Content Source. 2. Add file types. 3. The second step in ...

  8. ToolBar和DrawerLayout的使用实现侧拉栏抽屉的开闭

    1.如图可以看到textColorPrimary,colorPrimary,colorPrimaryDark,navigationBarColor等颜色属性代表的相应位置,如下图 2.具体属性在res ...

  9. Magical平台类库代码分享

    这些天闲来无事,就整理了一些类库.jQuery插件和自定义控件.今天和大家分享下Magical平台类库代码. 下图为整个解决方案图.MagicalPlatForm里面定义的是众多的Layer层:Mag ...

  10. Linux 卸载mysql-libs包出现错误

    在Red Hat Enterprise Linux6.6上安装MySQL时,出现与package mysql-libs-5.1.73-3.el6_5.x86_64冲突的情况 [root@localho ...