这是一个使用 Chart.js 创建堆积条形图(有时称为堆积柱形图)的简单示例。
Chart.js 为设计人员和开发人员提供简单而灵活的 JavaScript 图表。
它允许您在 HTML 中创建所有类型的条形图、折线图、区域图和其他图表。它使用画布标准。虽然我更喜欢在 Web 上处理数据可视化时使用SVG,但 Chart.js 是一个流行的选项,因此值得一试。
从一个基本的开始index.html
:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
- <title>My Stacked Bar Chart</title>
- </head>
- <body>
-
- </body>
- </html>
在正文中,我们需要一个<canvas>
要绑定的元素。这是图表将出现的地方。
<canvas id="chart"></canvas>
我们将引入 Chart.js 库。
<script src="[https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.3.0/Chart.min.js](https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.3.0/Chart.min.js)"></script>
图表的其余部分将使用 JavaScript 编码。所以另一个<script>
标签是必要的。
- <script>
- // Chart code will go here.
- </script>
我们首先需要一个对<canvas>
我们之前编写的元素的引用。
var ctx = document.getElementById('chart');
我们将在这个元素上实例化一个新图表。第一个参数是绑定元素,第二个是我们图表的定义。该定义将具有三个属性:类型、数据和选项。
- var myChart = new Chart(ctx, {
- type: 'bar',
- data: {},
- options: {}
- });
请注意,我们已经告诉 Chart.js 这将是一个bar
类型图表。
在data
属性中,我们将定义数据集及其标签。在我的示例中,我有三个数据集——都具有相同的标签。
- data: {
- labels: ['Risk Level'],
- datasets: [
- { /* dataset one */ },
- { /* dataset two */ },
- { /* dataset three */ }
- ]
- }
每个数据集都有一个标签、数据数组和背景颜色。在堆积条形图中,每个数据集将只有一个数据点。
- datasets: [
- {
- label: 'Low',
- data: [67.8],
- backgroundColor: '#D6E9C6' // green
- },
- {
- label: 'Moderate',
- data: [20.7],
- backgroundColor: '#FAEBCC' // yellow
- },
- {
- label: 'High',
- data: [11.4],
- backgroundColor: '#EBCCD1' // red
- }
- ]
我们已经告诉 Chart.js 我们想要一个条形图,我们已经告诉它我们的数据,最后一步是告诉它这是应该堆叠的图表。我们在options
物业中这样做。
- options: {
- scales: {
- xAxes: [{ stacked: true }],
- yAxes: [{ stacked: true }]
- }
- }
最终结果是堆积条形图。
这是
完整的代码:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
- <title>My Stacked Bar Chart</title>
- <script src="Chart.min.js"></script>
-
-
- </head>
- <body>
- <canvas id="chart"></canvas>
- <canvas id="canvas18"></canvas>
- <script>
- var ctx = document.getElementById('chart');
-
- var myChart = new Chart(ctx, {
- type: 'bar',
- data: {
- labels: ['张三', '李四'],
- datasets: [
- {
- label: '语文',
- data: [94.5, 89.6],
- backgroundColor: '#D6E9C6',
- },
- {
- label: '数学',
- data: [84.2, 93.5],
- backgroundColor: '#FAEBCC',
- },
- {
- label: '英语',
- data: [88.4, 87.8],
- backgroundColor: '#EBCCD1',
- }
- ]
- },
- options: {
- scales: {
- xAxes: [{stacked: true}],
- yAxes: [{stacked: true}]
- }
- }
- });
-
-
- var ctx18 = document.getElementById('canvas18').getContext('2d');
- window.myBar = new Chart(ctx18, {
- type: 'bar',
- data: {
- labels: ["2021-07", "2021-08", "2021-09", "2021-10", "2021-11", "2021-12", "2022-01", "2022-02", "2022-03", "2022-04", "2022-05", "2022-06", "2022-07"],
- datasets: [{
- label: '连接时间(毫秒)',
- backgroundColor: 'rgb(255, 99, 132)',
- borderColor: 'rgb(255, 99, 132)',
- borderWidth: 1,
- data: ["318", "324", "330", "349", "360", "368", "376", "382", "389", "395", "398", "402", "403"]
- },
- {
- label: '读取时间(毫秒)',
- backgroundColor: 'rgb(54, 162, 235)',
- borderColor: 'rgb(54, 162, 235)',
- borderWidth: 1,
- data: ["436", "439", "463", "470", "538", "540", "540", "541", "633", "633", "633", "634", "634"]
- }]
-
- },
- options: {
- responsive: true,
- legend: {
- position: 'top',
- },
- title: {
- display: true,
- text: '系统1'
- },
- scales: {
- xAxes: [{stacked: true}],
- yAxes: [{stacked: true}, {
- ticks: {
- beginAtZero: true
- }
- }]
- }
-
-
- }
- });
- </script>
-
- </body>
- </html>