如何使用ChartJS创建多色条形图

时间:2020-02-23 14:45:51  来源:igfitidea点击:

在本教程中,我们将学习使用ChartJS和一些静态数据绘制多色条形图。

在上一教程中,我们介绍了如何使用静态数据绘制条形图。
在本教程中,我们将为条形图使用不同的颜色。

项目结构

我们将从以下项目结构开始。

现在,在css文件夹中,我们将创建一个default.css文件。
在js文件夹中,我们将创建一个bar-multicolor.js文件。
在项目文件夹中,我们将创建一个bar-multicolor.html文件。

bar-multicolor.html

在head内部,我们包含了default.css文件,该文件将为图形设置样式。

body内部,我们有一个canvas元素,其ID为bar-chartcanvas
我们将在此画布内绘制条形图。

在文件末尾的body标记之前,我们包括jquery.min.js,Chart.min.js和bar-multicolor.js javascript文件。

<!DOCTYPE html>
<html>
<head>

  <title>ChartJS - Multicolor Bar graph</title>
  <link href="css/default.css" rel="stylesheet">

</head>
<body>

  <div class="chart-container">
    <canvas id="bar-chartcanvas"></canvas>
  </div>

  <!-- javascript -->
  <script src="js/jquery.min.js"></script>
  <script src="js/Chart.min.js"></script>
  <script src="js/bar-multicolor.js"></script>
  
</body>
</html>

default.css

该文件包含一些样式规则以对图表进行样式设置。

.chart-container {
  width:  80%;
  height: 480px;
  margin: 0 auto;
}

bar-multicolor.js

在此文件中,我们具有使用ChartJS和静态数据创建条形图的逻辑。

在此示例中,我们有5场比赛的两个团队TeamA得分和TeamB得分,分别是match1,match2,... match5。

对于不同的颜色,我们将backgroundColor属性设置为颜色数组。

$(document).ready(function () {

  var ctx = $("#bar-chartcanvas");

  var data = {
    labels : ["match1", "match2", "match3", "match4", "match5"],
    datasets : [
      {
        label : "TeamA score",
        data : [10, 50, 25, 70, 40],
        backgroundColor : [
          "red", "green", "blue", "purple", "magenta"
        ],
        borderColor : [
          "#111", "#111", "#111", "#111", "#111"
        ],
        borderWidth : 1
      },
      {
        label : "TeamB score",
        data : [20, 35, 40, 60, 50],
        backgroundColor : [
          "aqua", "salmon", "darkgray", "pink", "coral"
        ],
        borderColor : [
          "#111", "#111", "#111", "#111", "#111"
        ],
        borderWidth : 1
      }
    ]
  };

  var options = {
    title : {
      display : true,
      position : "top",
      text : "Bar Graph",
      fontSize : 18,
      fontColor : "#111"
    },
    legend : {
      display : false
    },
    scales : {
      yAxes : [{
        ticks : {
          min : 0
        }
      }]
    }
  };

  var chart = new Chart( ctx, {
    type : "bar",
    data : data,
    options : options
  });

});

随机多色条形图

为了在每次加载页面时获得随机的多色条形图,我们使用了getRandomColorHex()函数。
此函数以十六进制形式返回颜色,例如#0011AA。

$(document).ready(function () {

  var ctx = $("#bar-chartcanvas");

  var data = {
    labels : ["match1", "match2", "match3", "match4", "match5"],
    datasets : [
      {
        label : "TeamA score",
        data : [10, 50, 25, 70, 40],
        backgroundColor : [
          getRandomColorHex(),
          getRandomColorHex(),
          getRandomColorHex(),
          getRandomColorHex(),
          getRandomColorHex()
        ],
        borderColor : [
          "#111",
          "#111",
          "#111",
          "#111",
          "#111"
        ],
        borderWidth : 1
      },
      {
        label : "TeamB score",
        data : [20, 35, 40, 60, 50],
        backgroundColor : [
          getRandomColorHex(),
          getRandomColorHex(),
          getRandomColorHex(),
          getRandomColorHex(),
          getRandomColorHex()
        ],
        borderColor : [
          "#111",
          "#111",
          "#111",
          "#111",
          "#111"
        ],
        borderWidth : 1
      }
    ]
  };

  var options = {
    title : {
      display : true,
      position : "top",
      text : "Random Multicolor Bar Graph",
      fontSize : 18,
      fontColor : "#111"
    },
    legend : {
      display : false
    },
    scales : {
      yAxes : [{
        ticks : {
          min : 0
        }
      }]
    }
  };

  var chart = new Chart( ctx, {
    type : "bar",
    data : data,
    options : options
  });

  /**
   * function to generate random color in hex form
   */
  function getRandomColorHex() {
    var hex = "0123456789ABCDEF",
        color = "#";
    for (var i = 1; i <= 6; i++) {
      color += hex[Math.floor(Math.random() * 16)];
    }
    return color;
  }

});