Chart.js是一个简单、面向对象、为设计者和开发者准备的图表绘制工具库。

相信大部分人都一样,看到一大筐用文本或者表格形式呈现的数据就头疼。因为这种呈现方式也太无聊了吧。。。而且这对于我们处理原始数据也造成一定的困难。

不信?我反手就是一个例子:

更进一步说,柱状图能够直观的显示出趋势或者事实。以这张表格为例,柱状图会直观地告诉你美国的人口是孟加拉的两倍,中国的人口是俄罗斯的10倍。你只需要看看柱状图的长度就可以得出这些信息。虽然这个表里只有10个国家,不出意料的话,我猜你大概也会直接忽略掉它。。。。正常情况下,人们只会看一两个他们感兴趣的国家。但是如果这张表被转换为柱状图的话,人们看一眼就会得到有关人口数量分布的大致信息。

那么本文的重点来了,你可以使用Chart.js来制作各种各样的图表。下面将为你全方位介绍chart.js。chart.js最与众不同之处是,它可以在HTML5 Canvas上面绘制出色的响应式图表。

Chart.js允许你把不同的图表类型混合在一起,然后在上面绘制日期、对数或自定义比例的数据。还可以在更改数据或更新颜色时应用运用框外动画。

下面将教你安装chart.js,然后介绍配置选项和其他的方面。

安装和使用

你可以从GitHub里面下载最新版本的Chart.js或者在你的项目中使用CDN link。或者你也可以通过以下命令在npm或bower中来安装chart.js。

npm install chart.js --save
bower install chart.js --save

Chart.js有两种不同的版本。常规版本的Chart.js和 Chart.min.js,附带chart.js库的同时还带着颜色解析器。如果你想使用这个版本并且在你的图表中使用时间轴,你需要在安装Chart.js之前安装上Moment.js

而另一个版本Chart.bundle.js Chart.bundle.min.js早就包含了Moment.js 。你唯一需要注意的就是两个版本只能安装一个,否则会引起错误。

一旦你决定好使用哪个版本之后,你就可以在你的项目中引入Chart.js了

<script src="path/to/Chart.min.js"></script>

<script>
var barChart = new Chart({...})
</script>

创建图表

下面将以上面的人口表为例来创建条形图。Y轴表示人口数量,X轴表示国家。下面将创建一个id名为popChart的画布。

<canvas id="popChart" width="600" height="400"></canvas>

一般来说,画布的宽度和高度决定了图表的尺寸。在创建响应式图表时,宽高比由画布的宽度和高度决定。

接下来,你需要实例化Chart类。这可以通过传递要绘制图表的画布的节点,jQuery实例或2d上下文来完成。

var popCanvas = $("#popChart");
var popCanvas = document.getElementById("popChart");
var popCanvas = document.getElementById("popChart").getContext("2d");

接下来你需要做的就是把所有的参数传递给构造器。

var barChart = new Chart(popCanvas, {
type: 'bar',
data: {
labels: ["China", "India", "United States", "Indonesia", "Brazil", "Pakistan", "Nigeria", "Bangladesh", "Russia", "Japan"],
datasets: [{
label: 'Population',
data: [1379302771, 1281935911, 326625791, 260580739, 207353391, 204924861, 190632261, 157826578, 142257519, 126451398],
backgroundColor: [
'rgba(255, 99, 132, 0.6)',
'rgba(54, 162, 235, 0.6)',
'rgba(255, 206, 86, 0.6)',
'rgba(75, 192, 192, 0.6)',
'rgba(153, 102, 255, 0.6)',
'rgba(255, 159, 64, 0.6)',
'rgba(255, 99, 132, 0.6)',
'rgba(54, 162, 235, 0.6)',
'rgba(255, 206, 86, 0.6)',
'rgba(75, 192, 192, 0.6)',
'rgba(153, 102, 255, 0.6)'
]
}]
}
});

第二个参数传递的对象包含了Chart.js创建图表的所有信息。type键指定图表类型,可以取下列值:linebarradar, polarArea, piedoughnut 以及bubble。data键包含了要用到的所有数据。background键图表的背景色。默认值是'rgba(0,0,0,0.1)'。

每个图表都有自己的特定键,你可以用它们来控制图表的外观。这张图表是上面代码最终呈现效果。

如果你想让图表在所有的设备上都显示一样的尺寸,只需将responsive的值设为false。

 

配置选项

Chart.js库允许你个性化定制你的图表。例如,你可以改变上面图表的颜色和边框宽度。你还可以通过更改字体大小和颜色来修改工具提示栏和图例。在这个小节里面你将会学习到这些设置样式的键。

Chart.js库具有四个特殊的全局键,可用于更改图表中的所有字体。这些键是  defaultFontFamily,  defaultFontSize,  defaultFontStyle,和  defaultFontColor。字体大小以像素为单位指定,不适用于  radialLinear刻度点标签。同样,  defaultFontStyle不适用于工具提示标题或页脚。

Chart.defaults.global.defaultFontFamily = "Lato";
Chart.defaults.global.defaultFontSize = 18;
Chart.defaults.global.defaultFontColor = 'blue';

下面的图表应用了上面这些全局字体设置。通过全局键来修改样式将有助于让你的网站风格保持一致。

你也可以修改图标中的图例。配置选项将需要传递到 options.legend命名空间中。您也可以为所有图表指定全局图例选项 Chart.defaults.global.legend。图例的位置受position键的控制,它的值 可以是topleftbottom,和right。你也可以使用display 键显示或隐藏图例。

除了图例之外,你还可以控制图例标签的外观。其配置选项在图例配置下方的label键中。可以使用boxWidth 键指定颜色框的宽度。当没有指定值时,使用默认值40。

默认情况下,字体系列,字体大小,字体颜色和字体样式值都将从全局配置继承。但是,你可以使用fontSizefontStylefontFamilyfontColor为它们指定自己的值。
var barChart = new Chart(popCanvas, {
type: 'bar',
data: data,
options: {
legend: {
display: true,
position: 'bottom',
labels: {
boxWidth: 80,
fontColor: 'rgb(60, 180, 100)'
}
}
}
});

你可以使用options.tooltips命名空间来控制图表的本地绘制方式  。类似地, Chart.defaults.global.tooltips可以用于设置全局工具提示栏的外观。可以使用enabled 键来指定是否向用户呈现工具提示。将将其设置为false 将禁用工具提示。该键的默认值为true。

你还可以使用intersect 键控制工具提示的显示/隐藏行为。当设置为true(也是此键的默认值)时,仅当鼠标指针与条形图进行交互时才会显示工具提示。设置时false,根据mode 键指定的行为显示工具提示。

Mode 键用于确定在工具提示栏中显示哪些元素。其默认值为nearest。当你设置intersectfalse时,将显示最接近鼠标指针的栏的工具提示。

就像图例一样,你还可以控制工具提示栏的基于不同字体的属性的值。唯一的区别是,必须为工具提示的标题、正文和页脚元素单独设置值。

例如,你可以通过改变 bodyFontFamily, bodyFontSize,  bodyFontStyle,和  bodyFontColor来改变提示栏的字体属性。工具提示栏的标题和页脚还有titleMarginBottomfooterMarginTop属性。它们可以用于在标题和页脚与工具提示栏的正文之间添加一些额外的空间。

同样,你可以使用xPadding和 yPadding属性向工具提示栏的左/右和上下两边添加额外的填充  。

你也可以使用caretSize 键控制工具栏提示箭头的大小。也可以使用backgroundColor 键更改工具提示栏的背景  。

var barChart = new Chart(popCanvas, {
type: 'bar',
data: data,
options: {
tooltips: {
cornerRadius: 0,
caretSize: 0,
xPadding: 16,
yPadding: 10,
backgroundColor: 'rgba(0, 150, 100, 0.9)',
titleFontStyle: 'normal',
titleMarginBottom: 15
}
}
});

上述选项将隐藏插入符号,因为caretSize被设置为0.

总结

以上给大家提供了chart.js库的基本介绍,然后展示了如何创建一个条形表。相信你也学会了各项配置吧~

虽然在这篇文章中只介绍了条形表,实际上上面的配置适用于所有类型的图表哒。

JavaScript已经成为在web上工作的"de facto" 语言之一。它不是没有它的学习曲线,它有很多框架和库等着你去学习。如果你正在寻找额外的资源来学习或在你的工作中使用,请查看我们在Envato marketplace中可用的内容。

Chart.js入门教程的更多相关文章

  1. [转]Chart.js入门教程

    Chart.js是一个简单.面向对象.为设计者和开发者准备的图表绘制工具库. 相信大部分人都一样,看到一大筐用文本或者表格形式呈现的数据就头疼.因为这种呈现方式也太无聊了吧...而且这对于我们处理原始 ...

  2. 【特别推荐】Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  3. Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  4. Vue.js 入门教程

    Vue.js 入门教程:https://cn.vuejs.org/v2/guide/index.html

  5. D3.js 入门教程

    最近需要用到d3, 记录下d3的教程 网上搜了几个关于d3的教程 D3.js 入门教程      http://wiki.jikexueyuan.com/project/d3wiki/author.h ...

  6. Ember.js入门教程、博文汇总

    第一章 对象模型 Ember.js 入门指南——类的定义.初始化.继承 Ember.js 入门指南——类的扩展(reopen) Ember.js 入门指南——计算属性(compute properti ...

  7. 网页3D引擎“Babylon.JS”入门教程翻译总结

    使用三个月的业余时间把官方教程的入门部分译为中文并上传到github,在下一步编程前做一个总结. 历程: 最早接触游戏编程是在大三下学期,用汇编语言和实验室里的单片机.触摸屏.电机(提供声效)编的打地 ...

  8. node.js 入门教程(beginnder guide

    非常好的教程: node入门: JavaScript与Node.js JavaScript与你 简短申明 服务器端JavaScript “Hello World” 一个完整的基于Node.js的web ...

  9. 前端框架React Js入门教程【精】

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

随机推荐

  1. Android开发实战之简单音乐播放器

    最近开始学习音频相关.所以,很想自己做一个音乐播放器,于是,花了一天学习,将播放器的基本功能实现了出来.我觉得学习知识点还是蛮多的,所以写篇博客总结一下关于一个音乐播放器实现的逻辑.希望这篇博文对你的 ...

  2. 魔法变量*args 和 **kwargs

    其实并不是必须写成*args 和**kwargs. 只有变量前面的 *(星号)才是必须的. 你也可以写成*var 和**vars. 而写成*args 和**kwargs只是一个通俗的命名约定. *ar ...

  3. transform详解

    1.简介 该算法用于实行容器元素的变换操作.有如下两个使用原型,一个将迭代器区间[first,last)中元素,执行一元函数对象op操作,交换后的结果放在[result,result+(last-fi ...

  4. 908D New Year and Arbitrary Arrangement

    传送门 分析 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string ...

  5. Python爬虫入门七之正则表达式

    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...

  6. maven配置logback

    [背景] 刚接触大数据项目,在生产环境中经常需要使用日志来判定一些问题的原因. 一直以来都在使用System.out.println的标准输出来往控制台上打印日志.这种方法对性能影响很大不说,查看日志 ...

  7. Python Socket实现简单的聊天室

    通过参考其他牛人的文章和代码,  再根据自己的理解总结得出,  说明已经加在注释中, FYI 主要参考文章: http://blog.csdn.net/dk_zhe/article/details/3 ...

  8. Sublime Text 2 安装配置插件

    最近学习python,看网上推荐用sublime text2挺方便,就学习了一下对sublime text2 安装插件,先放在这里,以备以后查找 根据晚上资料修改,原文请看这里 Python的自动补全 ...

  9. maven 引用本地jar

    1.添加lib文件夹在src文件夹中.2.拷贝所需要的test.jar包到lib文件夹.3.在pom文件加入如下依赖 <!--添加本地私有包--><dependency> &l ...

  10. centos7用fdisk进行分区

    1.查看分区信息:fdisk -l 从上面可以看到,/dev/sdb分区还没有使用,现在将其划分成2个10G的分区. 2.执行:fdisk /dev/sdb 1):fdisk命令参数 p:打印分区表. ...