显示"没有数据"没有数据的饼图的消息

时间:2018-01-07 11:20:18

标签: chart.js pie-chart

我使用chartjs在Piechart下面。我需要显示一个" No Data"当没有任何东西要显示时,就会显示消息。

但是我无法在chartjs教程中找到这样的方法。有人可以帮忙吗?

饼图HTML

<div id="canvas-holder-CT" style="width:46%;float:right;position: absolute; left: 0px; top: 700px;">
    <canvas id="chart-area-CT" width="350" height="450" style="display: block; margin-left:2em">
    </canvas>
    <center> <b><details>
      <summary>Distribution by Call Types</summary>
    </details> </b></center>
</div>

饼图脚本

var configCT = {
    type : 'pie',
    data : {
        datasets : [{
                data : valuesCT,
                backgroundColor : coloringCT,
                label : 'Distribution by Call Types'
            }
        ],
        labels : labelsCT
    },
    options : {
        segmentShowStroke : false,
        legend : false,
        animateScale : true,
        responsive : true,
        showAllTooltips : false,
        tooltips : {
            custom : function (tooltip) {
                if (!tooltip)
                    return;
                tooltip.displayColors = false;
            }
        }
    }
};

var ctxCT = document.getElementById("chart-area-CT").getContext("2d");
if (myPieCT != null) {
    myPieCT.destroy();
}
myPieCT = new Chart(ctxCT, configCT);

2 个答案:

答案 0 :(得分:5)

您检查了这个open issue吗?

etimberg用户提出的相关解决方案:

Chart.plugins.register({
    afterDraw: function(chart) {
    if (chart.data.datasets.length === 0) {
        // No data is present
      var ctx = chart.chart.ctx;
      var width = chart.chart.width;
      var height = chart.chart.height
      chart.clear();

      ctx.save();
      ctx.textAlign = 'center';
      ctx.textBaseline = 'middle';
      ctx.font = "16px normal 'Helvetica Nueue'";
      ctx.fillText('No data to display', width / 2, height / 2);
      ctx.restore();
    }
  }
});

请参阅:https://jsfiddle.net/x04ptfuu/

答案 1 :(得分:0)

可以由CSS display属性处理。

foo.html

<div id="showId" class="showData">
  <canvas id="myChart"></canvas>
</div>
<div id="noId" class="noData">
  <span>No Data Available</span>
<div>

foo.css

.showData {
   display: block;
}

.noData {
   display: none;
}

foo.js

// ...code
if(chartData) {
  document.getElementById("showId").classList.add("showData");
  document.getElementById("noId").classList.remove("noData");
} else {
  document.getElementById("showId").classList.remove("showData");
  document.getElementById("noId").classList.add("noData");
}