我正在使用版本为2.8.0的chart.js来展示一个柱状图和一个饼图。
非空的柱状图和饼图显示效果符合我的预期。
然而,当柱状图和饼图为空或没有数据可展示时,是否有一种标准化的选项可以为这两种图表显示一个“暂无数据!”的消息,以代替空白或零数据。
我已经在谷歌搜索了插件和SO查找解决方案,但我找到的选项要么根本不起作用,要么不适用于最新版本的Chartjs。
以下是我的空饼图:
new Chart(document.getElementById('pieChartExample01'), {
type: 'pie',
data: {
labels: [
'Views',
'Print Requests',
'PDF Downloads',
'DOCX Downloads',
],
datasets: [{
backgroundColor: [
'rgba(71, 101, 160, 0.3)', // #4765a0.
'rgba(0, 0, 0, 0.3)', // #000000.
'rgba(52, 137, 219, 0.3)', // #3489db.
'rgba(179, 179, 179, 0.3)', // #b3b3b3.
],
hoverBackgroundColor: [
'rgba(71, 101, 160, 0.6)', // #4765a0.
'rgba(0, 0, 0, 0.6)', // #000000.
'rgba(52, 137, 219, 0.6)', // #3489db.
'rgba(179, 179, 179, 0.6)', // #b3b3b3.
],
borderWidth: 1,
hoverBorderWidth: 2,
borderColor: [
'rgba(71, 101, 160, 1)', // #4765a0.
'rgba(0, 0, 0, 1)', // #000000.
'rgba(52, 137, 219, 1)', // #3489db.
'rgba(179, 179, 179, 1)', // #b3b3b3.
],
borderAlign: 'inner',
data: [0, 0, 0, 0]
}]
},
options: {
title: {
display: false,
text: 'Overall Activity'
}
}
});
<canvas id="pieChartExample01" width="25" height="25"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
这是我想要空饼图显示的内容(最好带标签):
答案更新 - 2019年4月13日
使用Core972提供的答案,我决定推广被接受的答案,以便可以在柱状图和饼图上显示所选消息,并显示数据标签,而不仅仅是一个空画布。
以下是我的解决方案,适用于饼图和条形图。
需要注意的几点:
当没有数据可显示时,边框也必须为零,否则会显示一个烦人的边框,显示为单个线条。使用简单的if else条件来隐藏或显示边框。
使用if else条件来显示/隐藏消息。如果有数据,则隐藏消息,否则如果数据为零,则显示消息。
我只在Chrome和Firefox中测试了这种方法,似乎工作正常。
希望这可以帮助到某些人!享受吧!
饼图并显示数据标签与浮动信息:
new Chart(document.getElementById('pieChartExample01'), {
type: 'pie',
data: {
labels: [
'Views',
'Print Requests',
'PDF Downloads',
'DOCX Downloads',
],
datasets: [{
backgroundColor: [
'rgba(71, 101, 160, 0.3)', // #4765a0.
'rgba(0, 0, 0, 0.3)', // #000000.
'rgba(52, 137, 219, 0.3)', // #3489db.
'rgba(179, 179, 179, 0.3)', // #b3b3b3.
],
hoverBackgroundColor: [
'rgba(71, 101, 160, 0.6)', // #4765a0.
'rgba(0, 0, 0, 0.6)', // #000000.
'rgba(52, 137, 219, 0.6)', // #3489db.
'rgba(179, 179, 179, 0.6)', // #b3b3b3.
],
borderWidth: 0,
hoverBorderWidth: 0,
borderColor: [
'rgba(71, 101, 160, 1)', // #4765a0.
'rgba(0, 0, 0, 1)', // #000000.
'rgba(52, 137, 219, 1)', // #3489db.
'rgba(179, 179, 179, 1)', // #b3b3b3.
],
borderAlign: 'inner',
data: [0, 0, 0, 0]
}]
},
options: {
title: {
display: false,
text: 'Overall Activity'
}
}
});
<div style="width: 100%; height: 100%; position: relative;">
<div style="text-align: center; width: 100%; height: 100%; position: absolute; left: 0; top: 100px; z-index: 20;">
<b>No data for you today!</b>
</div>
<canvas id="pieChartExample01" width="25" height="25"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
</div>
let chart = new Chart(ctx, { plugins: [ { afterDraw: function(chart){...} } ]}
。 - Advena