使用Echart做统计图表,这个方便快捷还高大上

官方网址 https://www.echartsjs.com/

按照文档,很快就做出了一个柱图表

在X轴下方,要显示出对应日期是星期几(上图最下方,用红框的部分),这个问题查了很长时间的API,终于找到了一个疑似能解决这个问题的配置项.

这个配置项markLine, 位置在: https://www.echartsjs.com/option.html#series-bar.markLine

不清楚这个配置项是为了实现哪些功能而制造的,但是解决了目前这个要求

具体配置如下:

markLine:
{
data:
[
[
// 0柱子位置绘画 起点
{
name: `周一`, xAxis: 0, y: canvaHeight,
lineStyle: { opacity: 0, color: '#69707F' }
},
// 终点
{ xAxis: 0, y: canvaHeight }
],
[
// 1柱子位置绘画 起点
{
name: `周二`, xAxis: 1, y: canvaHeight,
lineStyle: { opacity: 0, color: '#69707F' }
},
// 终点
{ xAxis: 1, y: canvaHeight }
],
],
// 不要动画
animation: false
}

配置项的简要说明:

markLine最重要的data属性,指定了绘画的内容和画的坐标位置,

data是一个数组,

每一数组项里面的内容是两个对象,其中0位表示起点数据,1位表示终点数据,这两个对象说明了绘画的起点和终点

// data中的一项
[
{
name: `周一`,// 要显示的文字或内容
xAxis: 0,// X坐标,0表示第1个柱子位置
y: canvaHeight,// y坐标,y表示相对于图表容器的Y坐标,TOP值,这里根据实际调整一下,让它正好处于X轴下方
lineStyle: { opacity: 0, color:'#69707F'}// 画线的样式,opacity表示,不需要画标线,只要文字就行
},
{
// 结束点的坐标
xAxis: 0,// 还是0,这里表示就是画在X轴的正下方
y: canvaHeight
}
]

另外,有个要注意的地方是,绘画出的内容会跳动,这其实是它的动画效果,由于设定的起止点为同一个点,所以它会原地闪动.将动画取消就不闪动了

{

   animation: false

}

也许这个问题有更简单的解决办法 ,但是找了很久的配置项,

却没有找到一个能直接在对应X轴下方,再显示一排内容的配置项,此种方法解决了.


以下是其它需求解决方案

* echartDOM容器和CANVAS之间有距离,这个距离使用这个grid属性可以指定,

 var option = {
grid: {
left: '15px',// 这个离左边距离
right:'15px'// 这个离右边距离
}
.........

* 让指定的柱子居中屏幕

为什么要实现这个功能呢,还是上面那个柱子图,如果需要将当天日期,例如12号这一天的柱子,显示在屏幕中央,有什么办法?

上面的例子是其实是做了一个横着滚动的DIV,里面才是echart的DIV.

<div class="echart-wapper" style="overflow-x:auto;overflow-y:hidden">

      <div class="echart-box"></div>

</div>

12号,这个柱子显示在中央了..

原理是设置外层DIV的scrollLeft这个值 ,让它滚动到正好 12号柱子的位置.

那么计算出12号柱子的位置就是关键了,柱子图的宽度可以预先设定好,

{
      barWidth:1800px;
}
 
这个值由柱子数和每柱子宽度得出,例如要显示30个柱子,每个柱子分配60px,那么就是1800px;
柱子图canvas与DIV之间的距离,可以设置为左 右,各 30px,就是每个柱子的一半长度 60px/2
这样设定后,就能计算出第12根柱子离DIV左边的距离了,就是 12*60px.这是个公式,可以得出N柱子离DIV左边的距离.
 
最后计算出滚动条的scrollLeft的值:这个有点复杂 
div在不滚动时,能够显示出最多X根柱子, X = 屏幕宽度 / 60px 
如果让第N个柱子显示在中央,那么 X/2根柱子,是不需要滚动的, 2 就是屏幕的1/2
由于N柱离左边的距离是N*60px,所以DIV的scrollLeft的值就是
 

(N - window.innerWidth / 2 / 60px) * 60px

也就是第N柱子,离左边的距离,减去不需要滚动的柱子数/2.
如果不希望柱子图贴屏幕的边,而是希望有一定的距离;  例如在滚动DIV上设置了  padding:0 15px;
那么上面的公式要再减去这个15px.
 
FUCK! 这个卑鄙的功能想了很久才整理好思路,没想到算法这么简单.
 

* 如果调整了canvasDOM 的宽度,那么如何重绘图表?

这个问题使用api就可以解决,地址在这里 https://echarts.baidu.com/api.html#echartsInstance.resize
官网原话
有时候图表会放在多个标签页里,那些初始隐藏的标签在初始化图表的时候因为获取不到容器的实际高宽,可能会绘制失败,因此在切换到该标签页时需要手动调用 resize 方法获取正确的高宽并且刷新画布,或者在 opts 中显示指定图表高宽。
chart.resize({width:'这里设置新图表的宽度就可以了'})

echart高大上,功能齐全,这也造成了,配置项很多,太复杂了.文档界面看起来也不甚清楚,如果有配置项和相应图表效果对照就好很多了...^_^

echart在X轴下方添加字的更多相关文章

  1. echarts的时间轴的提示内容写在轴下方

    echarts的时间轴的提示内容写在轴下方 在echarts中横坐标的拖动轴dataZone的提示内容在两端,并且没有相关配置让其显示在轴下方或者其他位置. 解决方式: 在图标下方添加dom并且监听拖 ...

  2. 黄聪:在WordPress后台文章编辑器的上方或下方添加提示内容

    WordPress 3.5 新增了一对非常有用的挂钩,可以快速在WordPress后台文章编辑器的上方或下方添加提示内容,下面是一个简单的例子,直接将代码添加到主题的 functions.php 文件 ...

  3. echart搭配时间轴进行展示 (本例展示的是多时间 多地区 多指标条件 )

    1:照常先来几张图 看效果  2:首先 看官方文档 我把echart官方的例子给扒下来并整理了得出如下效果 上 案例图和代码 效果图 : 代码: <style type="text/c ...

  4. Echart 改变X轴、Y轴、折线的颜色和数值

    在操作E-chart时需要根据需求改变颜色和属性 图1: option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu' ...

  5. 关于echart的x轴固定为0-24小时显示一天内的数据

    需求: echart折线图横坐标x轴固定显示为0-1-2-3-...-23-24一共24小时的数据. 根据需求,我在网上以及echart官网,发现x轴无论type是类目轴还是时间,都是自动处理的,尤其 ...

  6. Echart ,X轴显示的为tooltip内显示的一部分内容放在上面显示的一部分如下图所示

    如图所示:X轴只显示tooltip部分内容解决方案 在xAxis下面,实现方法如下 axisLabel: { interval: 0, formatter:function(value) { var ...

  7. HighCharts、EChart图表X轴纵向显示

    HighCharts 回调javascript函数来格式化标签,值通过this.value获得,this的其他属性还包括axis, chart, isFirst and isLast. 默认为: fu ...

  8. echart提示框内容数据添加单位

    本文为博主原创,转载须注明转载地址: 方法为: tooltip : { trigger: 'axis', formatter: '{a0}:{c0}%' }, legend: { data:['测试' ...

  9. Echart自定义y轴刻度信息2

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

随机推荐

  1. Spring MVC深入学习

    一.MVC思想 MVC思想简介:        MVC并不是java所特有的设计思想,也不是Web应用所特有的思想,它是所有面向对象程序设计语言都应该遵守的规范:MVC思想将一个应用部分分成三个基本部 ...

  2. npm --save-dev --save 的区别

    我们在使用npm install 安装模块或插件的时候,有两种命令把他们写入到 package.json 文件里面去,比如: --save-dev(-D) --save(-S) 在 package.j ...

  3. 20190409-层叠の层叠上下文、层叠水平、层叠顺序、z-index、伪元素层叠

    写在前面乱七八糟的前言: 此"八卦"的源于,在写下图这个圆滚滚的导航布局时,使用元素及其伪元素加上绝对定位完成,但遇到:before或:after伪元素与元素的层叠顺序,就是伪元素 ...

  4. [Python] wxPython 高防Windows10记事本 (end...)

    1.开始 接触Python 也有一段时间了,o.o ,断断续续加起来没几天. 一般新学习一门新语言,除了必先输出一个 Hello World 外,都会以模拟 Windows 记事本来写一个结合自己想法 ...

  5. Oracle中用序列和触发器实现ID自增

    在设计数据库的时候,Oracle中没有类似SQL Server中系统自动分配ID作为主键的功能,这时Oracle可以通过“序列”和“触发器”来实现ID自动增加的功能. 1.创建序列Sequence c ...

  6. As-If-Serial 理解

    as-if-serial语义的意思指: 不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变.编译器,runtime 和处理器都必须遵守as-if-serial语义.为了 ...

  7. console.table(),在控制台以表格形式输出对象

    今天给大家安利一个属性,console.table(). 它的作用在控制台以表格的形式显示object.这样看起来是不是更方便了呢. var aaa = [ {index:0,name:"1 ...

  8. 《你必须掌握的Entity Framework 6.x与Core 2.0》勘误

    第5章 5.1.1----致谢网友[宪煌] public virtual ICollection Post {get;set;} 修改为 public virtual ICollection<P ...

  9. Windows下切分文件(GnuWin32)

    windows下碰到查看大日志文件还真麻烦,今天找了个工具来做这个:安装GnuWin32,然后用里面的split命令分割日志文件 ps:发现intellij idea还挺好,超过2g的日志文件也能进行 ...

  10. Facebook 广告投放相关概念简介(1)

    本文不涉及具体代码实现,仅对开发API的前置内容做简单介绍,想参考代码请绕行! 广告主(广告管理工具) ·需要推广自己的应用.网站.主页,所以有了广告管理工具 . ·一个广告主仅可拥有一个广告账户(可 ...