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是一个极其得心应手的工具,他帮我快速生成了我想要的图表。

相关推荐
高申航2 分钟前
Vue 3 + DYMO Connect Framework 实战:从标签模板到打印服务的完整实现
前端·javascript·vue.js
C++ 老炮儿的技术栈3 分钟前
西门子 S7 常用存储区(I/Q/M/T/C/DB/PI/PQ)
linux·开发语言·c++·windows·qt·io
雪芽蓝域zzs7 分钟前
分页组件 + el-config-provider 中文国际化 + 靠右布局
前端·javascript·vue.js
码行山野赴时序归途22 分钟前
顺序表(Sequential List)详解:从数组到 C 语言实现
c语言·开发语言·数据结构·算法
扬大平仔24 分钟前
# 小深:用 AgentScope Java 2.0 Harness 做私人助手(上)mysql
java·开发语言·mysql
阿里云基础软件34 分钟前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·人工智能·操作系统·sysom 诊断 skill
志尊宝39 分钟前
Vue3 零基础每日笔记(016):v-for 列表渲染——key 的作用与为什么不能用 index
javascript·vue.js·笔记
ctlover1 小时前
Python高级与正则表达式
开发语言·python
泡海椒1 小时前
生产环境安全配置:JQuickJavaInvocationGuard自定义防护规则实战
开发语言·python·安全
yume_sibai1 小时前
07-Rust 异步编程完全指南(async/await + Tokio + Future + 并发原语 + 异步流)
开发语言·后端·rust