使用百度echarts仿雪球分时图(二)
上一章简单的介绍了一下分时图的构成,其实就是折线图跟柱状图的组成。本来这章打算是把分时图做完,然后再写一章来进行美化和总结,但是仔细观察了一下,发现其实东西还是有点多的。分时图的图表做完后,还要去美化,调整分数图的各种提示信息,比如鼠标放进去的时候会有一个十字,一个信息框,以及各个刻度的详细刻度值,等等。所以这章我们要的是把分时图图表全部画出来,美化、提示信息则放到接下来的章节。开始写代码。
一.使用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仿雪球分时图(二)的更多相关文章
- 使用百度echarts仿雪球分时图(四)
这章节来收拾一下一些小BUG,顺便把各个小提示信息也补上,分时图也就完成了. 上章节末尾提到的一个bug,就是第一个grid跟第三个grid之间是断开的,折线并没有连在一起,所以先来收拾这个问题.没有 ...
- 使用百度echarts仿雪球分时图(一)
第一次写技术博客,有不足的地方希望大家指证出来,我再加以改正,谢谢大家. 之前一直没有找到一个合适的分时图项目,所以决定自己动手撸一个.接触的图表框架不多,在网上看到不少人推荐使用echarts,看了 ...
- 使用百度echarts仿雪球分时图(三)
这章节将完成我们的分时图,并使用真实的数据来进行展示分时图. 一天的交易时间段分为上午的09:30~11:30,下午的13:00~15:00两个时间段,因为分时间段的关系,数据是不连续的,所以会先分为 ...
- 使用百度Echarts制作力导向图
最近项目需求制作一个力导向图来展示企业的画像等关系信息,故想到了百度Echarts的关系图,在这使用Echarts3.0版本来实现.先上效果图,再看代吗 哎,本来想整个工程扔出来,发现好像没地方上传附 ...
- WPF仿百度Echarts人口迁移图
GitHub地址:https://github.com/ptddqr/wpf-echarts-map/tree/master 关于大名鼎鼎的百度Echarts我就不多说了 不了解的朋友直接看官方的例子 ...
- C#+JQuery+.Ashx+百度Echarts实现全国省市地图和饼状图动态数据图形报表的统计
在目前的一个项目中,需要用到报表表现数据,这些数据有多个维度,需要同时表现出来,同时可能会有大量数据呈现的需求,经过几轮挑选,最终选择了百度的echarts作为报表基础类库.echarts功能强大,界 ...
- 百度echarts可以做什么
百度echarts可以做什么 一.总结 一句话总结:可视化做的很好,各种图都有.而且支持动态数据. 二.百度eCharts体验 前言 从昨天开始给项目里添加一些图表对比功能,上一个项目里使用的是Hig ...
- ECharts使用心得总结(二)
Echarts使用心得总结(二) 前言: 前一段时间一直都挺忙的,各种事,也没来得及每周的总结,趁着晚上的一点时间把项目中用的Echart中常用的各种图表给抽象总结了一下,趁着周末跟大家分享一下.之前 ...
- iOS-Andriod百度地图仿百度外卖-饿了么-选择我的地址-POI检索/
http://zanderzhang.gitcafe.io/2015/09/19/iOS-Andriod百度地图仿百度外卖-饿了么-选择我的地址-POI检索/ 百度外卖选择送货地址: 饿了么选择送货地 ...
随机推荐
- ubuntu下如何安装hg(mercurial)?
答: sudo apt-get install mercurial
- 【算法导论】--分治策略Strassen算法(运用下标运算)【c++】
由于偷懒不想用泛型,所以直接用了整型来写了一份 ①首先你得有一个矩阵的class Matrix ②Matrix为了方便用下标进行运算, Matrix的结构如图:(我知道我的字丑...) Matrix. ...
- 动态中位数-POJ 3784
题目: 依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数. 输入格式 第一行输入一个整数P,代表后面数据集的个数,接下来若干行输入各个数据集. 每个数据集的第一 ...
- shell学习笔记3-后台执行命令
cron 系统调度进程,使用它在每天的某时间或一周.一月的不同时间运行 at 使用它在一个特点的时间允许一些特殊的作业 & 使用它在后台允许一个占用时间不长的进程 Nohup 使用它在后台运行 ...
- 【VS开发】CString 转为 char *方法大全
[VS开发]CString 转为 char *方法大全 标签(空格分隔): [VS开发] 方法1: CString strTemp; char szTemp[128]; strTemp = _T(&q ...
- linux中sleep详解实例
在linux编程中,有时候会用到定时功能,常见的是用sleep(time)函数来睡眠time秒:但是这个函数是可以被中断的,也就是说当进程在睡眠的过程中,如果被中断,那么当中断结束回来再执行该进程的时 ...
- Memcache分布式锁
在分布式缓存的应用中,会遇到多个客户端同时争用的问题.这个时候,需要用到分布式锁,得到锁的客户端才有操作权限 下面通过一个简单例子介绍: 这里引用的是Memcached.ClientLibrary.d ...
- 洛谷 题解 P2937 【[USACO09JAN]激光电话Laserphones】
看到这题,一下就想到了爆搜.(不过这题输入也是够坑的) 单纯的搜索肯定是会超时的,所以这里需要考虑一些剪枝. 我们令bin[i][j][k]为在第i行j列时,方向为k的最小镜子数,若当时的镜子数已大于 ...
- 小菜鸟之java基础
1. javac 命令的作用: javac 编译器解析 Java 源代码,并生成字节码文件的过程 2. java为什么可以跨平台: ava有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚 ...
- 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 ...