[英]Multiple charts in one page with chart.js
我使用 chart.js 及其依赖项 jQuery 来绘制图表。 就我而言,我的其中一个页面中需要 2 个甜甜圈图,这是我的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.js"></script>
<title>Document</title>
<script>
$(function () {
var ctx = document.getElementById("layanan").getContext('2d');
var data = {
datasets: [{
data: [10, 20, 30],
backgroundColor: [
'#3c8dbc',
'#f56954',
'#f39c12',
],
}],
labels: [
'Request',
'Layanan',
'Problem'
]
};
var myDoughnutChart = new Chart(ctx, {
type: 'doughnut',
data: data,
options: {
maintainAspectRatio: false,
legend: {
position: 'bottom',
labels: {
boxWidth: 12
}
}
}
});
var ctx_2 = document.getElementById("layanan_subbagian").getContext('2d');
var data_2 = {
datasets: [{
data: [10, 20, 30],
backgroundColor: [
'#3c8dbc',
'#f56954',
'#f39c12',
],
}],
labels: [
'Request',
'Layanan',
'Problem'
]
};
var myDoughnutChart_2 = new Chart(ctx_2, {
type: 'doughnut',
data: data_2,
options: {
maintainAspectRatio: false,
legend: {
position: 'bottom',
labels: {
boxWidth: 12
}
}
}
});
});
</script>
</head>
<body>
<canvas id="layanan" width="240" height="240"></canvas>
<canvas id="layanan_subbagian" width="240" height="240"></canvas>
</body>
</html>
当我只有一张图表时,没有任何问题,但是当我尝试再添加一张图表时,我的图表变得如此之大,我的页面布局变得如此凌乱。 你们能弄清楚我的代码有什么问题吗? 谢谢。
根据chartjs文档:
无法直接从 CANVAS 元素检测画布大小何时发生变化。 Chart.js 使用其父容器来更新画布渲染和显示大小。 但是,此方法要求容器相对定位并仅专用于图表画布。 然后可以通过设置容器大小的相对值来实现响应性
来源: https : //www.chartjs.org/docs/latest/general/responsive.html
您应该将画布包裹到 div 中并在其中添加宽度、高度。
这是我所做的改变
<div style="width:240px;height:240px">
<canvas id="layanan"></canvas>
</div>
<div style="width:240px;height:240px">
<canvas id="layanan_subbagian" ></canvas>
</div>
$(function () { var ctx = document.getElementById("layanan").getContext('2d'); var data = { datasets: [{ data: [10, 20, 30], backgroundColor: [ '#3c8dbc', '#f56954', '#f39c12', ], }], labels: [ 'Request', 'Layanan', 'Problem' ] }; var myDoughnutChart = new Chart(ctx, { type: 'doughnut', data: data, options: { maintainAspectRatio: false, legend: { position: 'bottom', labels: { boxWidth: 12 } } } }); var ctx_2 = document.getElementById("layanan_subbagian").getContext('2d'); var data_2 = { datasets: [{ data: [10, 20, 30], backgroundColor: [ '#3c8dbc', '#f56954', '#f39c12', ], }], labels: [ 'Request', 'Layanan', 'Problem' ] }; var myDoughnutChart_2 = new Chart(ctx_2, { type: 'doughnut', data: data_2, options: { maintainAspectRatio: false, legend: { position: 'bottom', labels: { boxWidth: 12 } } } }); });
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script src="https://code.jquery.com/jquery-3.3.1.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.js"></script> <title>Document</title> <div style="width:240px;height:240px"> <canvas id="layanan"></canvas> </div> <div style="width:240px;height:240px"> <canvas id="layanan_subbagian" ></canvas> </div>
尝试添加
options: {
responsive: false
}
我找到了两个解决方案:
您必须将图表放在一个容器中,例如div
。 <canvas>
是语义上专用于通过脚本动态绘制图形的元素。 <div>
是一个通用容器。 重要的一点是:宽度和高度属性不是以px为单位的大小,而是它们之间的比例。 <canvas id="layanan" width="240px" height="240px"></canvas>
将导致 1:1 的比例,但您需要使用父容器。 在下面的示例中,我在每个画布周围放置了一个 div。
您可以通过将maintainAspectRatio
设置为false
来禁用此功能。 从我的代码中删除 div 并将其设置为您的代码会产生相同的结果:)
干杯!
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script src="https://code.jquery.com/jquery-3.3.1.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.js"></script> <title>Document</title> <script> $(function () { var ctx = document.getElementById("layanan").getContext('2d'); var data = { datasets: [{ data: [10, 20, 30], backgroundColor: [ '#3c8dbc', '#f56954', '#f39c12', ], }], labels: [ 'Request', 'Layanan', 'Problem' ] }; var myDoughnutChart = new Chart(ctx, { type: 'doughnut', data: data, options: { responsive: false, maintainAspectRatio: false, legend: { position: 'bottom', labels: { boxWidth: 12 } } } }); var ctx_2 = document.getElementById("layanan_subbagian").getContext('2d'); var data_2 = { datasets: [{ data: [10, 20, 30], backgroundColor: [ '#3c8dbc', '#f56954', '#f39c12', ], }], labels: [ 'Request', 'Layanan', 'Problem' ] }; var myDoughnutChart_2 = new Chart(ctx_2, { type: 'doughnut', data: data_2, options: { responsive: false, maintainAspectRatio: false, legend: { position: 'bottom', labels: { boxWidth: 12 } } } }); }); </script> </head> <body> <div> <canvas id="layanan" width="240px" height="240px"></canvas> </div> <div> <canvas id="layanan_subbagian" width="240px" height="240px"></canvas> </div> </body> </html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.