Highcharts 江湖就这样,别介意

2015年就停止简书更新了!!
专注于github, 有需要几千github star 的可以联系我!!!

最近老喜欢夸人。
真是 吾辈之楷模,业界之精英,家里好男人。社会好榜样,人民好公仆,能上厅堂。能下厨房。能搬砖起舞,能舞枪弄棒,能吞能吐,能屈能伸

图表插件,业界有很多,有highcharts echarts D3抑或其他,但是个人觉得 highchairs 确实好用。起码我理解起来是这样的

这篇文章不是简单的讲解怎么使用highcharts 。 官网有get started。


Highcharts 基本组成

Highcharts 包含标题(Title)、坐标轴(Axis)、数据列(Series)、数据提示框(Tooltip)、图例(Legend)、版权标签(Credits)等,另外还可以包括导出功能按钮(Exporting)、标示线(PlotLines)、标示区域(PlotBands)、数据标签(dataLabels)等

Paste_Image.png
Paste_Image.png

我们姑且由浅入深的来看下这些

首先假设我们已经有了html 页面 , 我们现在需要做的就是改变 options

<script src="https://code.highcharts.com/highcharts.js"></script>

<div id="container"></div>

<script>
     var options = {}
     $(function(){
     Highcharts.chart('container’,options)
     })
</script>

颜色(colors)

Highcharts 中数据列的颜色是通过 colors 来指定的,colors 是个颜色值数组,默认是:

colors: ['#7cb5ec', '#434348', '#90ed7d', '#f7a35c', '#8085e9', '#f15c80', '#e4d354', '#8085e8', '#8d4653', '#91e8e1']

共有 10个默认颜色,你可以修改颜色值或增加颜色个数来自定义图表数据列颜色。

每个点的形状通过plotOptions 控制

   plotOptions: {
    series: {
        marker: {
            enable: true,
            symbol: 'circle'
        }
    }
},
Paste_Image.png

chart , title ,subtitle

一图解决的事情就不唧唧歪歪了。

Paste_Image.png
Paste_Image.png
Paste_Image.png

版权标签(Credits)

Paste_Image.png

图例(Legend)

图例。用不同形状、颜色、文字等 标示不同数据列,通过点击标示可以显示或隐藏该数据列。

Paste_Image.png

下面是详细描述

Paste_Image.png
Paste_Image.png
Paste_Image.png

默认图例点击事件

1、默认图例点击事件
图例默认的点击行为是显示或隐藏当前数据列。

 plotOptions: {
    series: {
      events: {
          legendItemClick: function(e) {
              /*
               * 默认实现是显示或隐藏当前数据列,e 代表事件, this 为当    前数据列
               */
          }
      }
    }
  } 

2、禁用图例点击隐藏效果

plotOptions: {
    series: {
      events: {
          legendItemClick: function(e) {
              return false;
          }
      }
    }
  } 
Paste_Image.png

数据提示框(Tooltip)

数据提示框指的当鼠标悬停在某点上时,以框的形式提示该点的数据,比如该点的值,数据单位等。数据提示框内提示的信息完全可以通过格式化函数动态指定;通过设置 tooltip.enabled = false
即可不启用提示框。

Paste_Image.png

提示框外观

下面的实例代码给出了关于数据提示框的外观的常用配置

  tooltip: {
  backgroundColor: '#FCFFC5',   // 背景颜色
  borderColor: 'black',         // 边框颜色
  borderRadius: 10,             // 边框圆角
  borderWidth: 3,               // 边框宽度
  shadow: ture,                 // 是否显示阴影
  animation: true               // 是否启用动画效果
  style: {                      // 文字内容相关样式
      color: "#ff0000",
      fontSize: "12px",
      fontWeight: "blod",
      fontFamily: "Courir new"
    }
  }

提示框内容

Paste_Image.png

html 内容

数据提示框默认(在没开启支持 HTML 模式的情况下)支持少量的 HTML 标签,包括 b br strong i em,标签的内容可以通过 style 属性来指定,不过仅限文字相关的 CSS 样式属性。

通过设置 ** tooltip.useHTML = true **

可以开启 HTML 模式,即可以用纯 HTML 内容来渲染数据提示框(默认是以 SVG 渲染)。

开启 HTML 模式后,就可以给提示框添加 链接、图片、表格等 HTML 元素,给提示框添加表格的示例代码是:

tooltip: {
shared: true,
useHTML: true,
headerFormat: '<small>{point.key}</small><table>',
pointFormat: '<tr><td style="color: {series.color}">{series.name}: </td>' +
    '<td style="text-align: right"><b>{point.y} EUR</b></td></tr>',
footerFormat: '</table>',
valueDecimals: 2
}
值的前缀、后缀及小数点

在展现数据信息是,我们经常会给数据添加一些修饰信息,例如数据单位。highcharts 提供了 valuePrefix、valueSuffix 来给数据添加前缀及后缀。

tooltip: { 
    valuePrefix: '¥',
    valueSuffix: '元'
}

另外,对于小数点的处理,可以通过 valueDecimals 来指定保留小数位数(当然可以通过格式化函数来进行更复杂的处理)。

对于多个数据列数据提示框添加后缀时,一般是将属性分别配置在数据列中,实例:

series: [{
  name: 'Rainfall',
  type: 'column',
  yAxis: 1,
  data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
  tooltip: {
      valueSuffix: ' mm'
  }
  }, {
  name: 'Temperature',
  type: 'spline',
  data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6],
  tooltip: {
      valueSuffix: '°C'
  }
}]

坐标轴(Axis)

所有的图表除了饼图都有X轴和Y轴,默认情况下,x轴显示在图表的底部,y轴显示在左侧(多个y轴时可以是显示在左右两侧),通过设置** chart.inverted = true ** 可以让x,y轴显示位置对调。下图为图表中坐标轴组成部分

Paste_Image.png

坐标轴标题。默认情况下,x轴为null(也就是没有title),y轴为'Value'

设置坐标轴标题的代码如下:

  xAxis:{
   title:{
     text:'x轴标题'
 }
}
yAxis:{
   title:{
       text:'y轴标题'
   }
}

坐标轴刻度标签

坐标轴标签(分类)。Labels常用属性有enabled 、formatter、setp、staggerLines

1)enabled
是否启用Labels。x,y轴默认值都是true,如果想禁用(或不显示)Labels,设置该属性为false即可。

2)Formatter

标签格式化函数。默认实现是:

formatter:function(){ return this.value;}

this.value
代码坐标轴上当前点的值(也就是x轴当前点的x值,y轴上当前点的y值),除了value变量外,还有axis、chart、isFirst 、isLast

可用。例如调用this.isFirst的结果如下图所示

Paste_Image.png

另外一个例子,实现更高级的自定义格式化函数,截图如下:

Paste_Image.png

实现代码如下:

yAxis: {        
  labels: {
    formatter:function(){
      if(this.value <=100) { 
        return "第一等级("+this.value+")";
      }else if(this.value >100 && this.value <=200) { 
        return "第二等级("+this.value+")"; 
      }else { 
        return "第三等级("+this.value+")";
      }
    }
  }
}

3)Step
Labels显示间隔,数据类型为number(或int)。下图说明了step的用法和作用

Y轴坐标轴标签步进

4)staggerLines

水平轴 Labels 显示行数。(该属性只对水平轴有效)当 Lables 内容过多时,可以通过该属性控制显示的行数。和该属性相关的还有maxStaggerLines属性。

3、坐标轴刻度
Tick为坐标轴刻度。默认情况下x轴刻度高(tickLength
属性)为5px,宽为1px;y轴宽为0px(也就是不显示刻度)。Tick相关的属性主要有tickLength、tickWidth、tickColor、tickInterval、tickmarkPlacement。


1)tickLength、tickWidth、tickColor 分别代表刻度线的长度、宽度、颜色。
2)tickInterval 刻度间隔。其作用和Lables.step 类似,就是不显示过多的x轴标签内容,不同的是,tickInterval是真正意义上的调整刻度,而Lables.step只是调整Labels显示间隔。所以在实际应用中,tickInterval 用的多。


3)tickmarkPlacement刻度线对齐方式,有between和on 可选,默认是between。设置为on

后的变化如下图:


Paste_Image.png

Axis gridLines
坐标轴网格线。默认情况下,x轴网格线宽度为0,y轴网格线宽度为1px。网格线共有三个属性可设置,分别是:

  gridLineWidth
  gridLineColor
  gridLineDashStyle

1)gridLineWidth
网格线宽度。x轴默认为0,y轴默认为1px。

2)gridLineColor
网格线颜色。默认为:#C0C0C0。

3)gridLineDashStyle
网格线线条样式。和Css border-style类似,常用的有:Solid、Dot、Dash

下图为自定义x和y轴的gridLines效果图

自定义网格线.png

数据列(Series)

数据列配置是 Highcharts 最复杂也是最灵活的配置,如果说 Highcharts 是灵活多变,细节可定制的话,那么数据列配置就是这个重要特性的核心

一、什么是数据列

数据列是一组数据集合,例如一条线,一组柱形等。图表中所有点的数据都来自数据列对象,数据列的基本构造是:

series : [{ name : '', data : []}]

提示:数据列配置是个数组,也就是数据配置可以包含多个数据列。数据列中的 name 代表数据列的名字,并且会显示在数据提示框(Tooltip)及图例(Legend)中。

二、数据列中的数据

在数据列的 data 属性中,我们可以定义图表的数据数组,通常有三种定义方式:

1、数值数组。在这种情况下,配置数组中的数值代表 Y 值,X 值则根据 X 轴的配置,要么自动计算,要么从 0 起自增,或者是根据 pointStart
及 pointInterval

自增;在分类轴中, X 值就是 categoies
配置,数值数组配置实例如下:

data : [1, 4, 6, 9, 10] 

2、包含两个值的数组集合。在这种情况下,集合中数组的第一个值代表 X, 第二个值代表 Y;如果第一个值是字符串,则代表该点的名字,并且 X 值会如 1 中所说的情况决定。数组集合的实例:

data : [ [5, 2], [6,3], [8,2] ]

3、数据点对象集合。在这种情况下,集合中元素都是数据点对象,对象中可以配置数据见 plotOptions.series
或 plotOptions.{图表类型}
所列。配置实例:

data : [{ name : "point 1", color : "#00ff00", y : 0}, { name : "Point 2", color : "#ff00ff", y : 5}]

另外,通过这种方式还可以增加额外变量,详见例子:增加额外变量


三、数据点及标记

在直角坐标图(即常规的包含X、Y轴的图表)中,数据点相当于图表中的一个 (x,y)点。数据点的配置可以在数据列中是数据数组里指定。对于其他类型的图表(非直角坐标图),数据点不仅仅表示 X,Y值,例如在范围图中,数据点包含 x,low, high值;在 OHLC (蜡烛柱状图)中,数据点包含 x,open , high, low, close;在饼图或仪表图中,数据点只表示一个值。

数据点配置适用所有图表,下面的例子说明了如何指定某个点的颜色:

series : [{
    data : [ 29,9, 71.5, 106.4, 
    {
        y : 200,
        color : "#BF0B23"
    }, 194.1 , 20 ]
}]

在 直线图、曲线图、面积图及面积范围图中可以为数据点指定标记,可以是某种形状, 图片等,实例:

series : [{
    data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6,148.5,
    {
      y: 216.4, 
      marker: { 
          fillColor: '#BF0B23',
          radius: 10 
      }
    }, 194.1, 95.6, 54.4]
}]

四、数据列配置

数据列共有三个级别的配置,权重从低到高依次如下:

配置在 plotOptions.series 中

对应的 API 为:plotOptions.series 中,针对所有类型图表有效,一般是通用配置。配置在 plotOptions.{图表类型} 中

对应的 API 为 : plotOptions 下的指定图表类型,针对当前类型图表有效,一般是某一种图表的通用配置。

配置在 series 中对应的 API 为:series, 针对当前数据列有效
以上三中方式自上往下权重依次递增的,也就是配置在 series 中的属性会覆盖 plotOptions 中的配置。 Highcharts API 的这种层级关系体现了 API 设计的继承性和灵活性。


下面列举数据列的一些常用属性

1、动画(Animation)

Highcharts 图表默认是以动画的形式展现图形加载过程的,可以通过 series.animation或 plotOptions.series.animation来指定动画相关配置(是否启用动画,动画效果等)。

2、颜色(Color)
可以通过 series.color 来指定数据列的颜色,通过 plotOptions.{图表类型}.color 来给某一种类型的图表设定颜色。

3、点的选择(Selection)

Paste_Image.png

通过设置 allowPointSelect = true 可以使数据点可选择

plotOptions: { series: { allowPointSelect: true }}

对应的获取选中的点是通过 chart.getSelectedPoints() 函数来实现的

var selectedPoints = chart.getSelectedPoints();

提示:按住 CTRL 或 SHIFT 键可以多选
4、线条宽度(lineWidth)

Paste_Image.png

可以通过 lineWidth 来指定线条宽度

series: [{
  data: [216.4, 194.1, 95.6],
  lineWidth: 5
}]

5、鼠标形状(cursor)
cursor 属性可以指定鼠标形状,即指定当鼠标悬停在数据列上时对应的鼠标样式(当配置了数据列点击事件时)。
6、数据标签(dataLables)

Paste_Image.png

数据标签指的是在数据点上显示一些数据信息标签,对应的 API 为 series.data.dataLabels

plotOptions: {
    line: {
        dataLabels: {
            enabled: true
        }
    }
}

数据标签默认显示当前数据点的点值,可以通过 formatter函数或 format来对其格式化。

plotOptions: {
    line: {
        dataLabels: {
            enabled: true,
            formatter: function() {
                return this.x + "   " + this.y;
            },
            // format: "{x}      {y}"
        }
    }
}

7、线条样式(Dash Style)

Paste_Image.png

dashStyle 可以指定线条的样式 (这里有 Highcharts 支持的所有 线条样式

series: [{    data: [1, 3, 2, 4, 5, 4, 6, 2, 3, 5, 6],    dashStyle: 'longdash'
}]
Paste_Image.png

小功能

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 最近在写个性化推荐的论文,经常用到Python来处理数据,被pandas和numpy中的数据选取和索引问题绕的比较...
    shuhanrainbow阅读 4,448评论 6 19
  • 一、highchart的组成 大致浏览一遍源代码,Highchart作为一个对象,会有大致以下几个构造函数。 每个...
    cuiy245阅读 2,796评论 1 5
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,191评论 0 17
  • 你也许不了解《爱玛》,但你一定听说过《理智与情感》,看过《傲慢与偏见》,他们皆出自一位英国18世纪的女性作...
    一橙子阅读 520评论 0 1