Chartjs:Line chart的使用及必要参数说明

简介: Chartjs:Line chart的使用及必要参数说明

Web前端做月度销售额的走势图时,Chartjs是一个不错的选择,展示效果令人满意,使用方法也很简单。


展示效果如下:


image.png


数据如下:


image.png


###第一步、获取数据

public void datableGoodAmountByLastMonths(HttpServletResponse response) {
  // 获取数据的list集合。
  List<HashMap> result = this.goodOrderService.getGoodAmountByShopUidLastMonths(InfoEL.getContextUid(), 7);
  // 转成json
  Map<String, Object> map = new HashMap<String, Object>();
  map.put("statusCode", 200);
  map.put("result", value);
  String jsonText = JSON.toJSONString(map);
  // 写入到response
  PrintWriter writer = null;
  try {
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    response.setContentType(contentType);
    writer = response.getWriter();
    writer.write(jsonText);
    writer.flush();
  } catch (IOException e) {
    throw new OrderException(e.getMessage());
  } finally {
    if (writer != null)
      writer.close();
  }
}


###第二步、在页面上创建Line Chart


<canvas id="salesChart" href="${ctx}/seller/datableGoodAmountByLastMonths" style="height: 340px;"></canvas>


通过赋值href把获取数据的url传递给chartjs。


设置linechart的参数,关键参数我已中文注解。

// linechart
var areaChartOptions = {
  // 轴线的颜色
  scaleLineColor : "rgba(60,141,188,0.8)",
  scaleShowLabels : true,// y轴上刻度的数值显示
// 显示轴线、以及刻度,默认为true
  showScale : true,
  // 在图标上显示网状表格。默认为false
  scaleShowGridLines : false,
  // 线条是否显示弧度,默认为true
  bezierCurve : false,
  // 显示数据线上的坐标点,默认为true,我认为显示出来比较好,否则鼠标找点很困难。
  pointDot : true,
  // 响应式
  responsive : true,
  // String - Colour of the grid lines
  scaleGridLineColor : "rgba(0,0,0,.05)",
  // Number - Width of the grid lines
  scaleGridLineWidth : 1,
  // Boolean - Whether to show horizontal lines
  // (except X axis)
  scaleShowHorizontalLines : true,
  // Boolean - Whether to show vertical lines (except
  // Y axis)
  scaleShowVerticalLines : true,
  // Number - Tension of the bezier curve between
  // points
  bezierCurveTension : 0.3,
  // Number - Radius of each point dot in pixels
  pointDotRadius : 4,
  // Number - Pixel width of point dot stroke
  pointDotStrokeWidth : 1,
  // Number - amount extra to add to the radius to
  // cater for hit detection outside the drawn point
  pointHitDetectionRadius : 20,
  // Boolean - Whether to show a stroke for datasets
  datasetStroke : true,
  // Number - Pixel width of dataset stroke
  datasetStrokeWidth : 2,
  // Boolean - Whether to fill the dataset with a
  // color
  datasetFill : true,
  // String - A legend template
  legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\"background-color:<%=datasets[i].lineColor%>\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>",
  // Boolean - whether to maintain the starting aspect
  // ratio or not when responsive, if set to false,
  // will take up entire container
  maintainAspectRatio : true
};


###第三步,将数据赋值给linechart

$(function() {
  $.ajax({
    type : 'POST',
    url : $("#salesChart").attr("href"),
    dataType : "json",
    cache : false,
    success : function(json) {
      // 判断获取的数据状态是否为200正常响应
      if (json[YUNM.keys.statusCode] == YUNM.statusCode.ok) {
        // 整理数据,chartjs需要数组的赋值,比起Morris(只需要指明x、y坐标即可)图标来说,这一点不方便
        var labels = [];
        var data = [];
        var data1 = [];
        for (var i = 0; i < json.result.length; i++) {
          data.push(json.result[i].good_amount);// 第一组数据交易额
          data1.push(json.result[i].good_count);// 第二组数据
          labels.push(json.result[i].all_day);// 组装x轴上显示得label
        }
        // LINE CHART,需要获取canvas的dom节点
        var areaChartCanvas = $("#salesChart").get(0).getContext("2d");
        var areaChart = new Chart(areaChartCanvas);
        // 画线
        areaChart.Line({
          labels : labels,// x轴上显示得label
          datasets : [ {
            label : "销售额",
            // 线条颜色
            fillColor : "rgba(60,141,188,0.9)",
            strokeColor : "rgba(60,141,188,0.8)",
            pointColor : "#3b8bba",
            pointStrokeColor : "rgba(60,141,188,1)",
            pointHighlightFill : "#fff",
            pointHighlightStroke : "rgba(60,141,188,1)",
            // 第一条线的数据
            data : data
          }, {
            label : "销量",
            fillColor : "rgba(210, 214, 222, 1)",
            strokeColor : "rgba(210, 214, 222, 1)",
            pointColor : "rgba(210, 214, 222, 1)",
            pointStrokeColor : "#c1c7d1",
            pointHighlightFill : "#fff",
            pointHighlightStroke : "rgba(220,220,220,1)",
            data : data1
          }, ]
        }, areaChartOptions);// 配置项
      }
    }
  });
});


OK,linechart的使用总结完毕。


最近,有不少读者问我是怎么学习的,那我干脆就把我看过的一些优质书籍贡献出来:


计算机基础入门推荐:《程序是怎样跑起来的》、《网络是怎样连接的》、《计算机是怎样跑起来的的》


进一步认识计算机网络:《计算机网络:自顶向下》、《图解http》


数据结构+算法入门:《大话数据结构》、《阿哈算法》


算法进阶:《算法第四版》、《编程珠玑》


由于我是 Java 技术栈的,顺便推荐几本 Java 的书籍,从左到由的顺序看到


Java:《Java核心技术卷1》、《编程思想》、《深入理解Java虚拟机》、《effective Java》、《Java并发编程的艺术》


数据库:《mysql必知必会》、《MySQL技术内幕:InnoDB存储引擎》


就先介绍这么多,这些都是最基础最核心的,希望对那些不知道看什么书的同学有所帮助。


相关文章
|
Shell 容器 Perl
Back-off restarting failed container 问题解决
Back-off restarting failed container 问题解决
2925 0
|
存储 缓存 NoSQL
Leveldb学习笔记:leveldb的使用与原理探究
Leveldb学习笔记:leveldb的使用与原理探究
Leveldb学习笔记:leveldb的使用与原理探究
|
分布式计算 监控 关系型数据库
基于Spark Streaming 进行 MySQL Binlog 日志准实时传输
基本架构 RDS -> SLS -> Spark Streaming -> Spark HDFS 上述链路主要包含3个过程: 如何把 RDS 的 binlog 收集到 SLS。 如何通过 Spark Streaming 将 SLS 中的日志读取出来,进行分析。
11286 0
|
4月前
|
SQL 搜索推荐 数据挖掘
数据分析怎么想、怎么用?一文讲透常见思维框架!
在数据分析中,很多人面对数据感到迷茫,主要问题在于缺乏清晰的思维框架。本文介绍了五种常用的数据分析思维框架,如拆解法、对比分析法、5W1H问题导向法等,帮助你在业务场景中理清思路、快速定位问题核心。通过实际案例讲解如何在不同情境下灵活运用这些框架,提升分析效率与逻辑表达能力,真正做到用数据驱动决策。
|
Web App开发 安全 物联网
常见物联网操作系统介绍
物联网操作系统是运行在物联网设备上的提供物物相连能力的操作系统,其核心在于能够将各种物体连接到互联网,并提供数据通信能力。
4068 1
|
关系型数据库 MySQL 数据安全/隐私保护
windows mysql8 安装后 提示密码不对,修改下密码认证方式就可以了
windows mysql8 安装后 提示密码不对,修改下密码认证方式就可以了
2471 3
|
12月前
|
网络协议 网络性能优化 数据处理
深入解析:TCP与UDP的核心技术差异
在网络通信的世界里,TCP(传输控制协议)和UDP(用户数据报协议)是两种核心的传输层协议,它们在确保数据传输的可靠性、效率和实时性方面扮演着不同的角色。本文将深入探讨这两种协议的技术差异,并探讨它们在不同应用场景下的适用性。
411 4
|
移动开发 Unix Linux
拉取代码编辑器中报错`Delete ␍ prettier/prettier` 问题的解决方案
通过正确配置Prettier、EditorConfig文件和编辑器设置,可以有效解决 `Delete ␍ prettier/prettier`的问题。这不仅能避免频繁的格式化错误,还能确保团队成员在不同开发环境下的代码风格一致,提升项目的代码质量和可维护性。按照上述解决方案调整配置后,您的项目将更加规范,代码也会更具一致性。
1122 4
|
物联网 C# C语言
物联网开发中C、C++和C#哪个更好用
在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。
|
前端开发 JavaScript 数据安全/隐私保护
从0到1开发一个自己的npm包完整过程
创建自己的 npm 包涉及六个步骤:1) 注册 npm 账号;2) 使用 `npm init` 初始化项目,确保 package.json 的 name 唯一且 private 为 false;3) 开发项目,可封装 UI 组件、函数库或命令行工具;4) 本地调试,通过 `npm link` 在项目中测试;5) `npm login` 登录账号,可能需切换至官方仓库;6) 使用 `npm publish` 发布项目。注意版本号递增,无意义的包不建议发布。
从0到1开发一个自己的npm包完整过程