上一章简单的介绍了一下分时图的构成,其实就是折线图跟柱状图的组成。本来这章打算是把分时图做完,然后再写一章来进行美化和总结,但是仔细观察了一下,发现其实东西还是有点多的。分时图的图表做完后,还要去美化,调整分数图的各种提示信息,比如鼠标放进去的时候会有一个十字,一个信息框,以及各个刻度的详细刻度值,等等。所以这章我们要的是把分时图图表全部画出来,美化、提示信息则放到接下来的章节。开始写代码。

一.使用echarts的grid属性,把多个图表整合成一个图表。上一章末尾,我们用PS工具把两个图表放在一起,形成了一个初步的分时图的样子,这次我们用代码来把多个图表整合到一块,这就要使用到echarts的grid属性了。 echarts的grid属性,官方文档是这么写的:直角坐标系内绘图网格,单个 grid 内最多可以放置上下两个 X 轴,左右两个 Y 轴。可以在网格上绘制折线图,柱状图,散点图(气泡图)。也就是说我们可以把一个大的图表拆成多个图表来进行组合,每一个grid就是一个单独图表,而我们的分时图恰好是多个图表组成,所以非常适合使用grid来实现。

如图,我们把分时图拆成4个grid来实现,为什么是4个grid,后面会提到。(提示:grid可以根据个人习惯来放置

二.我们先使用上一节的折线图、柱状图例子,来生成4个grid,并且把它们组合到一起。grid属性可以是一个对象,也可以是一个数组,因为我们有4个图表,所以使用数组的方式来实现。

// echarts折线图的配置项
var option = {
// grid
grid:[
// 第一个grid
{
top:10,// 图表的外边距
height:200,// 图表的高度
width:'50%',//因为是左右各一个图表,使用百分比的方式显得更方便,
},
// 第二个grid,第二个图表是在第一个图表的下方,所以要把它定位到底部
{
top:210,//设置上方的外边距是第一个图表的高度再加10,使用top是方便我们调整下方grid的高度
width:'50%',// 宽度与第一个图表一个大
height:100
}
],
// 多个图表则会存在对个x轴y轴,所以这里的配置我们也换成数组的方式
// x轴配置,
xAxis:[
// 第一个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:0,
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
// 第二个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:1,
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
}
],
// y轴配置
yAxis: [
// 第一个grid的y轴属性
{
gridIndex:0,
type: 'value'
},
// 第二个grid的y轴属性
{
gridIndex:1,
type: 'value'
}
],
// 数据可以通过xAxisIndex,yAxisIndex属性,来指定是哪个grid的数据
series: [{
xAxisIndex:0,
yAxisIndex:0,
data: [1, 5, 5, 8, 2, 9, 4],
type: 'line'
},{
xAxisIndex:1,
yAxisIndex:1,
data: [1, 5, 5, 8, 2, 9, 4],
type: 'bar'
}]
};

这是效果图

这个是2个grid的组成,同理我们复制一下grid,修改一下配置,就可以变成4个grid的组合。

// echarts折线图的配置项
var option = {
// grid
grid:[
// 第一个grid
{
top:10,// 图表的外边距
height:200,// 图表的高度
left:0,
width:'50%',//因为是左右各一个图表,使用百分比的方式显得更方便,
},
// 第二个grid,第二个图表是在第一个图表的下方,所以要把它定位到底部
{
top:210,//设置上方的外边距是第一个图表的高度再加10,使用top是方便我们调整下方grid的高度
left:0,
width:'50%',// 宽度与第一个图表一个大
height:100
},
// 第三个grid,第三个图表是在第一个图表的右方,所以要把它定位到右方
{
top:10,// 图表的外边距
left:'50%',//设置右边图表的左边距是第一个图表的大小,达到定位右边的效果
width:'50%',// 宽度与第一个图表一个大
height:200
},
// 第四个grid,第四个图表是在第三个图表的下方,所以要把它定位到底部
{
top:210,//设置上方的外边距是第三个图表的高度再加10,使用top是方便我们调整下方grid的高度
left:'50%',//设置右边图表的左边距是第三个图表的大小,达到定位右边的效果
width:'50%',// 宽度与第一个图表一个大
height:100
}
],
// 多个图表则会存在对个x轴y轴,所以这里的配置我们也换成数组的方式
// x轴配置,
xAxis:[
// 第一个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:0,
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
// 第二个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:1,
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
// 第三个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:2,
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
// 第三个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:3,
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
}
],
// y轴配置
yAxis: [
// 第一个grid的y轴属性
{
gridIndex:0,
type: 'value'
},
// 第二个grid的y轴属性
{
gridIndex:1,
type: 'value'
},
// 第三个grid的y轴属性
{
gridIndex:2,
type: 'value'
},
// 第四个grid的y轴属性
{
gridIndex:3,
type: 'value'
}
],
// 数据可以通过xAxisIndex,yAxisIndex属性,来指定是哪个grid的数据
series: [{
xAxisIndex:0,
yAxisIndex:0,
data: [1, 5, 5, 8, 2, 9, 4],
type: 'line'
},{
xAxisIndex:1,
yAxisIndex:1,
data: [1, 5, 5, 8, 2, 9, 4],
type: 'bar'
},{
xAxisIndex:2,
yAxisIndex:2,
data: [1, 5, 5, 8, 2, 9, 4],
type: 'line'
},{
xAxisIndex:3,
yAxisIndex:3,
data: [1, 5, 5, 8, 2, 9, 4],
type: 'bar'
}]
};

效果图

到这一步,4个grid已经全部出来了,接下来就是要去调整图表的样式了。

 三.现在我们看到左边的刻度值是不见了的,图形的第一个点和边框是有一定的距离,右边图表的刻度值应该是要显示在右边的,而且上方的两个折线图图表的x轴刻度是不应该显示的,所以我们先调整一下。

调整这个样式,主要是针对x轴y轴的属性进行调整。

  1.左边的刻度不显示,是因为我们把grid的left值设置成了0,没有留给刻度值显示的位置,所以把左边图表的left值设置得大一些。left值变大后,会发现右边的图表跟左边的图表重叠了,因为右边的图表的left值是第一个图表的宽度,但是图表的宽度不包括刻度值的宽度,这两个是独立的,所以右边图表的left值,应该是 第一个图表的width+第一个图表的left值,为了方便,我们把第一个图表的left修改成10%,宽度是40%,这样一来,右边的图表的left值就可以是50%了,但是宽度要修改成40%,(个人建议:使用图表div的宽度,来计算各个图表的left值,width值,而不是使用百分比)。

  

// grid
grid:[
// 第一个grid
{
top:10,// 图表的外边距
height:200,// 图表的高度
left:'10%',
width:'40%',//因为是左右各一个图表,使用百分比的方式显得更方便,
},
// 第二个grid,第二个图表是在第一个图表的下方,所以要把它定位到底部
{
top:210,//设置上方的外边距是第一个图表的高度再加10,使用top是方便我们调整下方grid的高度
left:'10%',
width:'40%',// 宽度与第一个图表一个大
height:100
},
// 第三个grid,第三个图表是在第一个图表的右方,所以要把它定位到右方
{
top:10,// 图表的外边距
left:'50%',//设置右边图表的左边距是第一个图表的大小,达到定位右边的效果
width:'40%',// 宽度与第一个图表一个大
height:200
},
// 第四个grid,第四个图表是在第三个图表的下方,所以要把它定位到底部
{
top:210,//设置上方的外边距是第三个图表的高度再加10,使用top是方便我们调整下方grid的高度
left:'50%',//设置右边图表的左边距是第三个图表的大小,达到定位右边的效果
width:'40%',// 宽度与第一个图表一个大
height:100
}
],

  效果图

  这样左边的刻度就出来了。接下来我们把右边图表的刻度,换到右边来显示,x轴y轴有一个postion属性,x轴的postion属性可以设置x轴显示在下方还是上方,y轴的position属性可以设置y轴显示在左边还是右边;上方的折线图的x轴刻度,是不需要显示的,x轴的axisTick,axisLabel属性是配置刻度的,把这两个属性show属性设置成false即可,所以修改代码。

// 多个图表则会存在对个x轴y轴,所以这里的配置我们也换成数组的方式
// x轴配置,
xAxis:[
// 第一个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:0,
// x轴的刻度
axisTick:{show:false},
// x轴的刻度值
axisLabel:{show:false},
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
// 第二个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:1,
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
// 第三个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:2,
// x轴的刻度
axisTick:{show:false},
// x轴的刻度值
axisLabel:{show:false},
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
// 第三个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:3,
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
}
],
// y轴配置
yAxis: [
// 第一个grid的y轴属性
{
gridIndex:0,
type: 'value'
},
// 第二个grid的y轴属性
{
gridIndex:1,
type: 'value'
},
// 第三个grid的y轴属性
{
position:'right',
gridIndex:2,
type: 'value'
},
// 第四个grid的y轴属性
{
position:'right',
gridIndex:3,
type: 'value'
}
],

效果图

接下来,我们把再进行一些美化,图形的第一个图形跟左边边框是有空隙的,要把这个空隙给取消掉,使用x轴的属性boundaryGap来配置是否留有空隙;底部的柱状图也要往下移一移,将top值加大,使用barWidth属性,设置柱状图的柱子也要变得苗条一些;折线图的颜色要统一起来,把线条上的圆点去掉,而且线条看起来很僵硬,要设置得顺滑一些。修改后的代码如下:

    // echarts折线图的配置项
var option = {
// grid
grid:[
// 第一个grid
{
top:10,// 图表的外边距
height:200,// 图表的高度
left:'10%',
width:'40%',//因为是左右各一个图表,使用百分比的方式显得更方便,
},
// 第二个grid,第二个图表是在第一个图表的下方,所以要把它定位到底部
{
top:240,//设置上方的外边距是第一个图表的高度再加10,使用top是方便我们调整下方grid的高度
left:'10%',
width:'40%',// 宽度与第一个图表一个大
height:100
},
// 第三个grid,第三个图表是在第一个图表的右方,所以要把它定位到右方
{
top:10,// 图表的外边距
left:'50%',//设置右边图表的左边距是第一个图表的大小,达到定位右边的效果
width:'40%',// 宽度与第一个图表一个大
height:200
},
// 第四个grid,第四个图表是在第三个图表的下方,所以要把它定位到底部
{
top:240,//设置上方的外边距是第三个图表的高度再加10,使用top是方便我们调整下方grid的高度
left:'50%',//设置右边图表的左边距是第三个图表的大小,达到定位右边的效果
width:'40%',// 宽度与第一个图表一个大
height:100
}
],
// 多个图表则会存在对个x轴y轴,所以这里的配置我们也换成数组的方式
// x轴配置,
xAxis:[
// 第一个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:0,
// 坐标轴是否留白
boundaryGap:false,
// x轴的刻度
axisTick:{show:false},
// x轴的刻度值
axisLabel:{show:false},
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
// 第二个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:1,
// 坐标轴是否留白
boundaryGap:false,
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
// 第三个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:2,
// 坐标轴是否留白
boundaryGap:false,
// x轴的刻度
axisTick:{show:false},
// x轴的刻度值
axisLabel:{show:false},
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
// 第三个grid的x轴属性
{
// 告诉echarts,这个第一个grid的x轴
gridIndex:3,
// 坐标轴是否留白
boundaryGap:false,
type: 'category',
// x轴显示的数据
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
}
],
// y轴配置
yAxis: [
// 第一个grid的y轴属性
{
gridIndex:0,
type: 'value'
},
// 第二个grid的y轴属性
{
gridIndex:1,
type: 'value'
},
// 第三个grid的y轴属性
{
position:'right',
gridIndex:2,
type: 'value'
},
// 第四个grid的y轴属性
{
position:'right',
gridIndex:3,
type: 'value'
}
],
// 数据可以通过xAxisIndex,yAxisIndex属性,来指定是哪个grid的数据
series: [
// 第一个图表的数据
{
// 平滑曲线
smooth:true,
// 是否显示折线上的圆点
symbol:'none',
// 线条颜色
lineStyle:{
color:"#0983F8"
},
xAxisIndex:0,
yAxisIndex:0,
data: [1, 5, 5, 8, 2, 9, 4],
type: 'line'
},
// 第二个图表的数据
{
xAxisIndex:1,
yAxisIndex:1,
// 柱状图柱子宽度
barWidth:5,
data: [1, 5, 5, 8, 2, 9, 4],
type: 'bar'
},
// 第三个图表的数据
{
// 平滑曲线
smooth:true,
// 是否显示折线上的圆点
symbol:'none',
// 线条颜色
lineStyle:{
color:"#0983F8"
},
xAxisIndex:2,
yAxisIndex:2,
data: [4, 5, 5, 8, 2, 9, 4],
type: 'line'
},
// 第四个图表的数据
{
xAxisIndex:3,
yAxisIndex:3,
// 柱状图柱子宽度
barWidth:5,
data: [1, 5, 5, 8, 2, 9, 4],
type: 'bar'
}
]
};

效果图

  本章节先到这里吧,这次我们用grid属性把4个grid组合成了一个大的图表,分时图已经基本成型,接下来的章节将对分时图进行全面的美化,并使用网络上的真实数据来展示我们的分时图。

使用百度echarts仿雪球分时图(二)的更多相关文章

  1. 使用百度echarts仿雪球分时图(四)

    这章节来收拾一下一些小BUG,顺便把各个小提示信息也补上,分时图也就完成了. 上章节末尾提到的一个bug,就是第一个grid跟第三个grid之间是断开的,折线并没有连在一起,所以先来收拾这个问题.没有 ...

  2. 使用百度echarts仿雪球分时图(一)

    第一次写技术博客,有不足的地方希望大家指证出来,我再加以改正,谢谢大家. 之前一直没有找到一个合适的分时图项目,所以决定自己动手撸一个.接触的图表框架不多,在网上看到不少人推荐使用echarts,看了 ...

  3. 使用百度echarts仿雪球分时图(三)

    这章节将完成我们的分时图,并使用真实的数据来进行展示分时图. 一天的交易时间段分为上午的09:30~11:30,下午的13:00~15:00两个时间段,因为分时间段的关系,数据是不连续的,所以会先分为 ...

  4. 使用百度Echarts制作力导向图

    最近项目需求制作一个力导向图来展示企业的画像等关系信息,故想到了百度Echarts的关系图,在这使用Echarts3.0版本来实现.先上效果图,再看代吗 哎,本来想整个工程扔出来,发现好像没地方上传附 ...

  5. WPF仿百度Echarts人口迁移图

    GitHub地址:https://github.com/ptddqr/wpf-echarts-map/tree/master 关于大名鼎鼎的百度Echarts我就不多说了 不了解的朋友直接看官方的例子 ...

  6. C#+JQuery+.Ashx+百度Echarts实现全国省市地图和饼状图动态数据图形报表的统计

    在目前的一个项目中,需要用到报表表现数据,这些数据有多个维度,需要同时表现出来,同时可能会有大量数据呈现的需求,经过几轮挑选,最终选择了百度的echarts作为报表基础类库.echarts功能强大,界 ...

  7. 百度echarts可以做什么

    百度echarts可以做什么 一.总结 一句话总结:可视化做的很好,各种图都有.而且支持动态数据. 二.百度eCharts体验 前言 从昨天开始给项目里添加一些图表对比功能,上一个项目里使用的是Hig ...

  8. ECharts使用心得总结(二)

    Echarts使用心得总结(二) 前言: 前一段时间一直都挺忙的,各种事,也没来得及每周的总结,趁着晚上的一点时间把项目中用的Echart中常用的各种图表给抽象总结了一下,趁着周末跟大家分享一下.之前 ...

  9. iOS-Andriod百度地图仿百度外卖-饿了么-选择我的地址-POI检索/

    http://zanderzhang.gitcafe.io/2015/09/19/iOS-Andriod百度地图仿百度外卖-饿了么-选择我的地址-POI检索/ 百度外卖选择送货地址: 饿了么选择送货地 ...

随机推荐

  1. ubuntu下如何安装hg(mercurial)?

    答:  sudo apt-get install mercurial

  2. 【算法导论】--分治策略Strassen算法(运用下标运算)【c++】

    由于偷懒不想用泛型,所以直接用了整型来写了一份 ①首先你得有一个矩阵的class Matrix ②Matrix为了方便用下标进行运算, Matrix的结构如图:(我知道我的字丑...) Matrix. ...

  3. 动态中位数-POJ 3784

    题目: 依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数. 输入格式 第一行输入一个整数P,代表后面数据集的个数,接下来若干行输入各个数据集. 每个数据集的第一 ...

  4. shell学习笔记3-后台执行命令

    cron 系统调度进程,使用它在每天的某时间或一周.一月的不同时间运行 at 使用它在一个特点的时间允许一些特殊的作业 & 使用它在后台允许一个占用时间不长的进程 Nohup 使用它在后台运行 ...

  5. 【VS开发】CString 转为 char *方法大全

    [VS开发]CString 转为 char *方法大全 标签(空格分隔): [VS开发] 方法1: CString strTemp; char szTemp[128]; strTemp = _T(&q ...

  6. linux中sleep详解实例

    在linux编程中,有时候会用到定时功能,常见的是用sleep(time)函数来睡眠time秒:但是这个函数是可以被中断的,也就是说当进程在睡眠的过程中,如果被中断,那么当中断结束回来再执行该进程的时 ...

  7. Memcache分布式锁

    在分布式缓存的应用中,会遇到多个客户端同时争用的问题.这个时候,需要用到分布式锁,得到锁的客户端才有操作权限 下面通过一个简单例子介绍: 这里引用的是Memcached.ClientLibrary.d ...

  8. 洛谷 题解 P2937 【[USACO09JAN]激光电话Laserphones】

    看到这题,一下就想到了爆搜.(不过这题输入也是够坑的) 单纯的搜索肯定是会超时的,所以这里需要考虑一些剪枝. 我们令bin[i][j][k]为在第i行j列时,方向为k的最小镜子数,若当时的镜子数已大于 ...

  9. 小菜鸟之java基础

    1. javac 命令的作用: javac 编译器解析 Java 源代码,并生成字节码文件的过程 2. java为什么可以跨平台: ava有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚 ...

  10. DISCO Presents Discovery Channel Code Contest 2020 Qual Task E. Majority of Balls

    Not able to solve this problem during the contest (virtual participation). The first observation is ...