Как можно избежать NaN на метке круговой диаграммы в диаграмме JS - PullRequest
1 голос
/ 12 октября 2019

Я пытаюсь объединить знак «%» на метке круговой диаграммы. Я использовал formatter для объединения знака '%', но проблема, которую он возвращает, выглядит следующим образом NaN%, как вы можете видеть на изображении ниже. Я хочу процент каждого среза со знаком «%». Как я могу это сделать? Может ли кто-нибудь помочь мне с моей проблемой?

     axios.post(this.urlRoot + this.api + "retrieve_best_medicine.php")
        .then(response => {
            vm.best_medicines = response.data
                var ctxChart = self.$refs.myChart2.getContext('2d');

                for(var i = 0; i < this.best_medicines.length; i++) {
                    sum += parseFloat(this.best_medicines[i].Quantity);
                }
                if (this.myChart2) this.myChart2.destroy();
                this.myChart2 = new Chart(ctxChart, {
                    type: 'pie',
                    data: {
                        labels: vm.best_medicines.map(item => item.MedicineName),
                        datasets: [{
                        label: 'Total Items',
                        data: vm.best_medicines.map(item => (item.Quantity / sum * 100).toFixed(2)),
                        backgroundColor: this.poolColors(vm.best_medicines.length),
                        borderColor: '#eee',
                        borderWidth: 2
                    }]
                },
                reponsive : true,
                options: {
                    title : {
                        display : true,
                        text : "Most Medicine",
                        fontFamily: "sans-serif",
                        fontSize: 18,
                    },
                    legend: {
                        display: false
                    },
                    tooltips: {
                        enabled: true,
                        mode: "single",
                        callbacks: {
                            title: function (tooltipItem, data) { return 'Medicine: ' + data.labels[tooltipItem[0].index]; },
                            label: function (tooltipItems, data) {
                                return 'Avg: ' + data.datasets[tooltipItems.datasetIndex].data[tooltipItems.index] + "%";      
                            } 
                        }
                    },
                    plugins: {
                        datalabels: {
                            formatter: (value, ctx) => {
                                let sum = 0;
                                let dataArr = ctx.chart.data.datasets[0].data;
                                dataArr.map(data => {
                                    sum += data;
                                });
                                let percentage = (value*100 / sum).toFixed(2)+"%";
                                return percentage;
                            },
                            color: 'white',
                            labels: {
                                title: {
                                    font: {
                                        weight: 'bold',
                                        fontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif"
                                    }
                                },
                                value: {
                                    color: 'white'
                                }
                            }
                        }
                    }
                }
            });
        }).catch(e => {
            console.log(e)
        });

enter image description here

1 Ответ

0 голосов
/ 12 октября 2019

Я решаю свою проблему с помощью этого кода ниже. Вы можете прочитать информацию здесь: Форматирование

formatter: value => { return value + '%';} 
...