缘起

  

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. sql常用语句(1)

    --排序 select Row_Number() over(order by a.UserName) as Num --区分性别 then '男' else '女' end SexName Sqlse ...

  2. 通过HttpListener实现简单的Http服务

    使用HttpListener实现简单的Http服务 HttpListener提供一个简单的.可通过编程方式控制的 HTTP 协议侦听器.使用它可以很容易的提供一些Http服务,而无需启动IIS这类大型 ...

  3. Java集合概述

    容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...

  4. [连载]《C#通讯(串口和网络)框架的设计与实现》-2.框架的总体设计

    目       录 C#通讯(串口和网络)框架的设计与实现... 1 (SuperIO)- 框架的总体设计... 1 第二章           框架总体的设计... 2 2.1           ...

  5. webapi 中的本地登录

    WebApi 身份验证方式 asp.net WebApi 中有三种身份验证方式 个人用户账户.用户可以在网站注册,也可以使用 google, facebook 等外部服务登录. 工作和学校账户.使用活 ...

  6. java面向对象三大特性之继承

    通过重用已经测试并验证通过的代码,怎样才减少开发工作,所有开发团队都在为一问题而努力.一个久经考验的方法是通过有效地使用Java继承优化应用程序开发. 继承的从某种意义上讲,继承的短暂美就如同宇宙中所 ...

  7. 深入浅出node(3) 异步I/O

    这篇主要整理深入浅出Node.js第三章 异步I/O 一) 异步I/O的原因 二)异步I/O实现现状 2.1 异步I/O与非阻塞I/O 2.2 轮询 2.3 理想的非阻塞异步I/O 2.4 现实的异步 ...

  8. 移动端全兼容的flexbox速成班

    说起flexbox,都算是件陈年旧事了,它是2009年W3C提出的一种全新的可伸缩的CSS布局方式.依赖flexbox,我们可以更简单,高效的完成可伸缩式页面的布局. 业界与flexbox的相关教程文 ...

  9. SVG简介

    最近遇到SVG这个名词,于是查阅资料,做个笔记. 前言 图片的数字化.将图片存储为数据有两种方案. 位图.也被称为光栅图.即是以自然的光学的眼光将图片看成在平面上密集排布的点的集合.每个点发出的光有独 ...

  10. input checkbox 扩大点击范围

    <div style="width:100%;height:100px;"><input type="checkbox" onclick=&q ...