本文作者:Jakub Juszczak 
编译:胡子大哈

翻译原文:http://huziketang.com/blog/posts/detail?postId=58e5e0e1a58c240ae35bb8e0 
英文连接:Creating stunning charts with Vue.js and Chart.js

转载请注明出处,保留原文链接以及作者信息

深入学习 chart.js 的选项来制作漂亮的图表。交互式图表可以给你的数据可视化提供很酷的展示方式。但是大多数开箱即用的解决方案用默认的选项并不能做出很绚丽的图表。

这篇文章中,我会教你如何自定义 chart.js 选项来制作很酷的图表。

⚡ Quick Start

我们需要:

  • Vue.js
  • vue-chart.js
  • vue-cli

使用 vue-cli 来搭基本架构,希望你已经安装好了。我们使用 vue-chart.js 来作为 chart.js 的打包器。

vue init webpack awesome-charts

然后到工程目录中安装依赖:

cd awesome-charts && yarn install

添加 vue-chartjs:

yarn add vue-chartjs -S

第一个图表

现在我们来创建第一个折现表。

touch src/components/LineChart.js && subl .

现在需要从 vue-chartjs 中引入折线表的基表,创建组件。

在 mount() 函数中使用我们准备好的数据和选项来调用 renderChart()方法。

    import {Line} from 'vue-chartjs'export default Line.extend({mounted () {this.renderChart({labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], datasets: [ { label: 'Data One', backgroundColor: '#FC2525', data: [40, 39, 10, 40, 39, 80, 40] },{ label: 'Data Two', backgroundColor: '#05CBE1', data: [60, 55, 32, 10, 2, 12, 53] } ] }, {responsive: true, maintainAspectRatio: false}) } }) 

代码中,使用了一些实例数据和可选参数传递给 chart.js 的数据对象,并且设置 responsive:true,使得图表会充满外层容器。

之所以可以使用 renderChart() 方法是因为我们继承了 BaseChart,这个方法和一些属性都是在 BaseChart 中定义的。

运行 & 测试

ok,现在从 App.vue 中把 Hello.vue 删掉,并且引入我们的图表:

    <template><div id="app"> <div class="container"> <div class="Chart__list"> <div class="Chart"> <h2>Linechart</h2> <line-example></line-example> </div> </div> </div> </div> </template> <script> import LineExample from './components/LineChart.js' export default { name: 'app', components: { LineExample } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } .container { max-width: 800px; margin: 0 auto; } </style> CopyRaw 

在终端中运行 dev 脚本,就可以看到图表了。

yarn run dev

把我变得更漂亮

现在该做些美化工作了? ,chart.js 中有很多很酷的技巧。可以传递一个十六进制的颜色数据到backgroundColor,也可以传递 rgba() 值,还可以设置颜色的透明度。chart.js 使用的是 html canvas 来绘图的,所以我们使用 createLinearGradient()。

从这里开始才是有趣的起点,使用它我们需要 canvas 对象。但这事并不难,vue-chartjs 中已经存在一个它的引用。我们可以使用 this.$refs.canvas 来访问。

在 LineChart.js 中,我们创建了两个变量来保存渐变。代码如下:

    this.gradient = this.$refs.canvas.getContext(‘2d’).createLinearGradient(0, 0, 0, 450) this.gradient2 = this.$refs.canvas .getContext(‘2d’) .createLinearGradient(0, 0, 0, 450) 

还有另外一个函数可以使用:addColorStop()

给每个渐变创建三个颜色点:

    this.gradient.addColorStop(0, ‘rgba(255, 0,0, 0.5)’) this.gradient.addColorStop(0.5, ‘rgba(255, 0, 0, 0.25)’); this.gradient.addColorStop(1, ‘rgba(255, 0, 0, 0)’); this.gradient2.addColorStop(0, ‘rgba(0, 231, 255, 0.9)’) this.gradient2.addColorStop(0.5, ‘rgba(0, 231, 255, 0.25)’); this.gradient2.addColorStop(1, ‘rgba(0, 231, 255, 0)’); 

现在就可以把 this.gradient 传递给 backgroundColor了,可以得到一个很好看的渐变。为了得到更好的效果,还可以设置 borderColor 的颜色,alpha 设置成 1 (或者用十六进制也行),设置 borderWidth 为 1,另外还可以设置 pointColor。

    borderColor: ‘#FC2525’,
    pointBackgroundColor: ‘white’,
    borderWidth: 1,  pointBorderColor: ‘white’, 
    import {Line} from 'vue-chartjs'export default Line.extend({data () {return { gradient: null, gradient2: null } }, mounted () { this.gradient = this.$refs.canvas.getContext('2d').createLinearGradient(0, 0, 0, 450) this.gradient2 = this.$refs.canvas.getContext('2d').createLinearGradient(0, 0, 0, 450) this.gradient.addColorStop(0, 'rgba(255, 0,0, 0.5)') this.gradient.addColorStop(0.5, 'rgba(255, 0, 0, 0.25)'); this.gradient.addColorStop(1, 'rgba(255, 0, 0, 0)'); this.gradient2.addColorStop(0, 'rgba(0, 231, 255, 0.9)') this.gradient2.addColorStop(0.5, 'rgba(0, 231, 255, 0.25)'); this.gradient2.addColorStop(1, 'rgba(0, 231, 255, 0)'); this.renderChart({ labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], datasets: [ { label: 'Data One', borderColor: '#FC2525', pointBackgroundColor: 'white', borderWidth: 1, pointBorderColor: 'white', backgroundColor: this.gradient, data: [40, 39, 10, 40, 39, 80, 40] },{ label: 'Data Two', borderColor: '#05CBE1', pointBackgroundColor: 'white', pointBorderColor: 'white', borderWidth: 1, backgroundColor: this.gradient2, data: [60, 55, 32, 10, 2, 12, 53] } ] }, {responsive: true, maintainAspectRatio: false}) } }) 

最后一步

最后一步是给 App.vue 的容器添加一些样式。

    .Chart {background: #212733;border-radius: 15px; box-shadow: 0px 2px 15px rgba(25, 25, 25, 0.27); margin: 25px 0; } .Chart h2 { margin-top: 0; padding: 15px 0; color: rgba(255, 0,0, 0.5); border-bottom: 1px solid #323d54; } 

最终结果

最终结果如图:

转载于:https://www.cnblogs.com/Unknw/p/6689221.html

使用 Vue.js 和 Chart.js 制作绚丽多彩的图表相关推荐

  1. 如何在 Vue 中使用 Chart.js - 手把手教你搭可视化数据图表

    本文首发:<如何在 Vue 中使用 Chart.js - 手把手教你搭可视化数据图表> 使用 Chart.js 在 Vue 搭建的后台管理工具里添加炫酷的图表,是所有数据展示类后台必备的功 ...

  2. Vue——vue-chartjs[Vue 对于 Chart.js 的封装]

    基本概念 vue-chartjs:vue-chartjs is a wrapper for Chart.js in vue. You can easily create reuseable chart ...

  3. 图表Chart.js入门教程

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

  4. HTML5——Canvas图表插件 chart.js的基础使用

    Canvas图表插件 推荐三种比较好用的. chart.js 灵活.可个性化设置图表样式的js图表插件 chartist.js 配置简单,只需要设置数据即可,包是最小的. HighCharts.js ...

  5. 图表Chart js入门教程

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

  6. 图表Chart.js入门教程(附代码)包括线性、柱状、圆形、饼形图

    官网:http://www.chartjs.org/ Github:https://github.com/chartjs/Chart.js 使用方法: 1,在页面中创建一个canvas画布  < ...

  7. Chart.js中文文档-雷达图

    雷达图或蛛网图(Radar chart) 简介 A radar chart is a way of showing multiple data points and the variation bet ...

  8. Chart.js使用

    下载chart.js,直接放到你的网页里: https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min.js 首先你要在页面里有个标 ...

  9. 前端开发之vue可视化数据图表组件(Chart.js)

    前端开发之vue可视化数据图表组件(Chart.js) 前言 制作好的效果图 vue2中使用Chart.js 1.在项目中安装Chart.js 组件 2.vue文件 vue3中使用Chart.js v ...

最新文章

  1. 2020年必学的 10 大算法
  2. SpringBoot简单使用ehcache
  3. RecyclerView的版本要和appcompat 的版本不一致 引发的错误
  4. win7 IIS 和 ASP.NET的配置
  5. 单目视觉定位测距的两种方式(转载)
  6. Vivado入门使用指南之----按键消抖(仿真与在线逻辑分析仪仿真-不使用ip)
  7. signature=c9b7b92b79e9a32ac6be9993bfe5df5a,这字幕= =太销魂了
  8. 通俗易懂——5G调制方式全面解读
  9. 无线路由!RTS DTIM阈值、Beacon 周期如何设置多少可以加快路由
  10. mov格式如何转换成mp4?详细步骤教程
  11. onscripter For windows/MAC OS 中文版
  12. Android--播放视频横竖屏切换的2种方式
  13. 清华大学推荐:这32本书籍你看过几本?
  14. 【练习】获取新浪搜索中的热搜榜的标题
  15. 线特征作为视觉描述:用于视觉定位的上下文感知线特征描述符
  16. tcp和udp的基本函数调用过程及如何选择
  17. 【CSDN】CSDN图片居中
  18. 假设有100个瓶子,其中只有1瓶有毒药,你现在有7只老鼠,怎么检测出那一瓶是由毒的(老鼠喝到有毒的就会死)
  19. Item category 04000 is missing (obligatory in accounting transaction 1000/0)
  20. win10双系统linux视频教程,Win10+Linux(CentOS) 双系统安装--踩坑实录

热门文章

  1. Glances:一款功能强大的操作系统安全监控平台
  2. Python isinstance() 函数用法及实例另类高级使用(附带classmethod 修饰符、json.dumps)
  3. Nvidia Jetson TX2+Intel Realsense D435i跑ORB_SLAM3
  4. h5页面嵌入android app时遇到的问题
  5. paper reading in this week
  6. Tomcat JVM 初始化加大内存
  7. 2019最后一个月Python继续霸榜,想上车?看这份书单
  8. 快抢!猪年之前最后一波送书福利,错过只能等“明年”
  9. 你的“不着急”,最后都是“来不及”
  10. python实现简易聊天需要登录博客园zip下载_Python基于Socket实现简易多人聊天室的示例代码...