Chart.js图标绘制工具库

文章目录


前言

在我的健康情况监视系统中,我需要大量用到图标绘制,Chart.js 是个十分便利的工具


一、Chart.js 是什么?

hart.js 是一个 前端数据可视化图表库,

简单说,它是一个 用来画图表的 JavaScript 工具。

他比ECharts、D3 更简单,而且和vue3完全兼容,有丰富的插件、动画效果。

二、使用步骤

1.html部分

代码如下(示例):

html 复制代码
<canvas id="myChart" width="400" height="400"></canvas>

2.js部分

  1. 引入Chart.js文件;
  2. 创建图表:实例化Chart对象(获取DOM节点取得2d context环境后实例化);
  3. 实例化Chart对象后就继续创建具体类型的图表了;
js 复制代码
new Chart(canvasDOM, {
  type: "line",   // 图表类型
  data: { ... },  // 数据
  options: { ... } // 配置项
});
  • type :图表类型,如 line、bar、pie...
  • data:图表的数据
  • options:控制图表样式:坐标轴,动画,网格,提示,交互(hover),颜色

标记点样式

3. Chart.js能绘制哪些图标

图表类型 用途(你项目里能用在哪里)
Line(折线图) 睡眠趋势、心率变化
Bar(柱状图) 日步数统计、周运动量
Pie(饼图) 每日营养分布
Doughnut(环形图) 目标达成度
Radar(雷达图) 综合健康评分
Polar Area 饮食结构
Bubble 多维数据
Scatter 心率 vs 步数关系

三、常用图标的大致使用方法

曲线图

我在我的项目中准备用曲线图来展现用户一周内用户运动量的变化,而在以前腾讯天气的项目中我也用chart.js实现了一周内温度变化的曲线图,大致构建方法如下

  1. html
html 复制代码
<canvas id="myChart" width="600" height="400"></canvas>
  1. js
css 复制代码
<script type="text/javascript">
    //方式一:
    var ctx = document.getElementById("myChart").getContext("2d");;
    var MyNewChart = new Chart(ctx).Line(data); //这种方式是只加载数据集,(缺省options)不修改默认参数(简称法一)

    //数据结构(数据参数设置)
    var data = {
        //折线图需要为每个数据点设置一标签。这是显示在X轴上。
        labels: ["January", "February", "March", "April", "May", "June", "July"],
        //数据集(y轴数据范围随数据集合中的data中的最大或最小数据而动态改变的)
        datasets: [{
                    fillColor: "rgba(220,220,220,0.5)", //背景填充色
                    strokeColor: "rgba(220,220,220,1)", //路径颜色
                    pointColor: "rgba(220,220,220,1)", //数据点颜色
                    pointStrokeColor: "#fff", //数据点边框颜色
                    data: [10, 59, 90, 81, 56, 55, 40] //对象数据
                }, {
                    fillColor: "rgba(151,187,205,0.5)",
                    strokeColor: "rgba(151,187,205,1)",
                    pointColor: "rgba(151,187,205,1)",
                    pointStrokeColor: "#fff",
                    data: [28, 48, 40, 19, 96, 27, 200]
                }]
            };

</script>
  1. 数据结构
css 复制代码
//数据结构(数据参数设置)
    var data = {
        //折线图需要为每个数据点设置一标签。这是显示在X轴上。
        labels: ["January", "February", "March", "April", "May", "June", "July"],
        //数据集(y轴数据范围随数据集合中的data中的最大或最小数据而动态改变的)
        datasets: [{
                    fillColor: "rgba(220,220,220,0.5)", //背景填充色
                    strokeColor: "rgba(220,220,220,1)", //路径颜色
                    pointColor: "rgba(220,220,220,1)", //数据点颜色
                    pointStrokeColor: "#fff", //数据点边框颜色
                    data: [10, 59, 90, 81, 56, 55, 40] //对象数据
                }, {
                    fillColor: "rgba(151,187,205,0.5)",
                    strokeColor: "rgba(151,187,205,1)",
                    pointColor: "rgba(151,187,205,1)",
                    pointStrokeColor: "#fff",
                    data: [28, 48, 40, 19, 96, 27, 200]
                }]
            };
  1. 图标参数
css 复制代码
 Line.defaults = {
                //网格线是否在数据线的上面
                scaleOverlay : false,

                //是否用硬编码重写y轴网格线
                scaleOverride : false,

                //** Required if scaleOverride is true **
                //y轴刻度的个数
                scaleSteps : null,

                //y轴每个刻度的宽度
                scaleStepWidth : 20,

                // Y 轴的起始值
                scaleStartValue : null,
                // Y/X轴的颜色
                scaleLineColor: "rgba(0,0,0,.1)",   
                // X,Y轴的宽度
                scaleLineWidth: 1,
                // 刻度是否显示标签, 即Y轴上是否显示文字
                scaleShowLabels: true,
                // Y轴上的刻度,即文字
                scaleLabel: "<%=value%>",
                // 字体
                scaleFontFamily: "'Arial'",
                // 文字大小
                scaleFontSize: 16,
                // 文字样式
                scaleFontStyle: "normal",
                // 文字颜色
                scaleFontColor: "#666",
                // 是否显示网格
                scaleShowGridLines: true,
                // 网格颜色
                scaleGridLineColor: "rgba(0,0,0,.05)",
                // 网格宽度
                scaleGridLineWidth:2,
                // 是否使用贝塞尔曲线? 即:线条是否弯曲
                bezierCurve: true,
                // 是否显示点数
                pointDot: true,
                // 圆点的大小
                pointDotRadius:5,
                // 圆点的笔触宽度, 即:圆点外层白色大小
                pointDotStrokeWidth: 2,
                // 数据集行程(连线路径)
                datasetStroke: true,
                // 线条的宽度, 即:数据集
                datasetStrokeWidth: 2,
                // 是否填充数据集
                datasetFill: true,
                // 是否执行动画
                animation: true,
                // 动画的时间
                animationSteps: 60,
                // 动画的特效
                animationEasing: "easeOutQuart",
                // 动画完成时的执行函数
                /*onAnimationComplete: null*/
            }

结合以上代码就可以构建出一个符合我们预期的双曲线图表,这样我们就简单地使用了Chart.js完成了图标的构建。

四、Chart.js 在 Vue3 中怎么使用?

1. 安装

bash 复制代码
npm install chart.js

2. 在vue组件中使用

vue 复制代码
<template>
  <canvas ref="canvas"></canvas>
</template>

<script setup>
import { ref, onMounted } from "vue"
import { Chart } from "chart.js/auto"

const canvas = ref(null)

onMounted(() => {
  new Chart(canvas.value, {
    type: "bar",
    data: {
      labels: ["Mon", "Tue", "Wed"],
      datasets: [{
        label: "步数",
        data: [3000, 5000, 7000],
      }]
    }
  })
})
</script>

总结

在我的项目中Chart.js是一个极其得心应手的工具,他帮我快速生成了我想要的图表。

相关推荐
薇茗1 分钟前
【初阶数据结构】 升沉有序的平仄 排序 3
c语言·开发语言·数据结构·算法·排序算法·文件归并排序
字节高级特工3 分钟前
C++11(一) 革新:右值引用与移动语义
java·开发语言·c++·人工智能·后端
安妮的小熊呢4 分钟前
CRMEB标准版v6.0: 商城DIY装修新升级,PS级自由设计!
运维·javascript·平面·信息可视化·小程序·开源软件
安生生申5 分钟前
uni-app 连接 JDY-31 蓝牙串口模块实践
c语言·前端·javascript·stm32·单片机·嵌入式硬件·uni-app
AI科技星8 分钟前
强哥德巴赫猜想(1+1)终极证明(2026 年5月 21 日)
开发语言·人工智能·算法·计算机视觉·量子计算
Liu.7749 分钟前
Vue3结合Element Plus封装点击查看大图的自定义指令
javascript·vue.js·elementui
lqj_本人10 分钟前
鸿蒙PC:electron-markdownify 从普通 Electron 迁移到 OpenHarmony Electron HAP 的完整实践
前端·javascript·electron
故事和你9113 分钟前
洛谷-【图论2-4】连通性问题2
开发语言·数据结构·c++·算法·动态规划·图论
Brilliantwxx14 分钟前
【C++】 二叉搜索树
开发语言·c++·算法
为何创造硅基生物9 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言