Pie chart.js -显示无数据保留消息

6za6bjd0  于 2022-11-06  发布在  Chart.js
关注(0)|答案(5)|浏览(190)

我使用的是chart.js版本:2.8.0以显示一个bar chart和一个pie chart
非空条形图和饼图将按我的需要显示。
但是,当条形图和饼图为空或没有数据可显示时,**是否有一个标准化选项可显示“No data to display!”(没有数据可显示!)消息,**该消息可用于显示条形图和饼图,以代替空或零数据。
我在谷歌上搜索了一个插件和一个解决方案,但我找到的选项要么根本不工作,要么不适用于最新版本的chartjs。
下面是我的空饼图:
第一个
这是我希望空饼图显示的内容(最好带有标签):

更新答复-2019年4月13日

使用Core 972提供的答案,我决定推断出可接受的答案,以便选择的消息可以显示在条形图和饼图上,并显示数据标签,而不仅仅是空白画布。
这是我想出的一个解决方案,它适用于饼图和条形图。
我还没有测试过其他类型的图表,但我认为它们也可以用同样的方法工作。
需要注意的几点:
1.如果没有要显示的数据,则边框也必须为零,否则会显示一条令人讨厌的单线边框。如有必要,请使用简单的if else条件来隐藏和显示边框。
1.使用if else条件显示/隐藏消息。如果有数据,则隐藏消息,否则如果数据为零,则显示消息。
1.我只在Chrome和Firefox上测试过这种方法,看起来效果不错。
我希望这能帮助到某人!好好享受吧!

显示数据标签和浮动消息的饼图:

第一个

ojsjcaue

ojsjcaue1#

使用这个插件,我稍微修改,检查每个数据集项目是否为零:

<script>
    Chart.plugins.register({
        afterDraw: function(chart) {
            if (chart.data.datasets[0].data.every(item => item === 0)) {
                let ctx = chart.chart.ctx;
                let width = chart.chart.width;
                let height = chart.chart.height;

                chart.clear();
                ctx.save();
                ctx.textAlign = 'center';
                ctx.textBaseline = 'middle';
                ctx.fillText('No data to display', width / 2, height / 2);
                ctx.restore();
            }
        }
    });
</script>

这样,如果所有数据集项都为0,则将显示No data to display来代替图表。

vawmfj5a

vawmfj5a2#

下面是一个使用chart.js 2.8.0的示例

<canvas id="pieChartExample01" width="25" height="25"></canvas>
<div id="no-data">Nothing to display</div>

...
options: {
  title: {
    display: false,
    text: 'Overall Activity'
  },
  animation: {
    onComplete: function(animation) {
      var firstSet = animation.chart.config.data.datasets[0].data,
        dataSum = firstSet.reduce((accumulator, currentValue) => accumulator + currentValue);

      if (typeof firstSet !== "object" || dataSum === 0) {
        document.getElementById('no-data').style.display = 'block';
        document.getElementById('pieChartExample01').style.display = 'none'
      }
    }
  }
}

Fiddle

z9gpfhce

z9gpfhce3#

对于Reactreact-chartjs-2
使用此插件

const plugins = [
  {
    afterDraw: function (chart) {
      console.log(chart);
      if (chart.data.datasets[0].data.length < 1) {
        let ctx = chart.ctx;
        let width = chart.width;
        let height = chart.height;
        ctx.textAlign = "center";
        ctx.textBaseline = "middle";
        ctx.font = "30px Arial";
        ctx.fillText("No data to display", width / 2, height / 2);
        ctx.restore();
      }
    },
  },
];

使用此插件

<Line height={120} data={props.data} options={options} plugins={plugins} />
<Pie height={320} width={500} data={props.data} options={options} plugins={plugins} />
vuktfyat

vuktfyat4#

对于那些使用3.x版本的库的人,下面是我的做法

const plugin = {
    id: 'emptyChart',
    afterDraw(chart, args, options) {
        const { datasets } = chart.data;
        let hasData = false;

        for (let dataset of datasets) {
            //set this condition according to your needs
            if (dataset.data.length > 0 && dataset.data.some(item => item !== 0)) {
                hasData = true;
                break;
            }
        }

        if (!hasData) {
            //type of ctx is CanvasRenderingContext2D
            //https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D
            //modify it to your liking
            const { chartArea: { left, top, right, bottom }, ctx } = chart;
            const centerX = (left + right) / 2;
            const centerY = (top + bottom) / 2;

            chart.clear();
            ctx.save();
            ctx.textAlign = 'center';
            ctx.textBaseline = 'middle';
            ctx.fillText('No data to display', centerX, centerY);
            ctx.restore();
        }
    }
};

而刚才使用上面这样的话:

const chart1 = new Chart(ctx, {
    plugins: [plugin]
});
gcuhipw9

gcuhipw95#

您需要在数据中设置一些数据:[0,0,0,0]不可能显示没有任何数据的饼图。我尝试只更改数据,但一切正常。

...
data: [2, 3, 4, 5]
...

https://jsfiddle.net/myeLq37j/

相关问题