PHPでMySQLからデータを取得し、Chart.jsで円グラフ化しようとしています。
円グラフ化はできており、Chart.jsのプラグイン機能を使って、デフォルトでは表示されないラベルを常に表示することもできました。
ただ、PHPで取得したデータが0のときも円グラフに「0」と表示されてしまうので、これを回避したいのですが、なかなかうまくいきません。
↓取得しているデータがこちらだとして。
青森|0
秋田|5
岩手|0
山形|0
宮城|0
福島|1
↓こんな感じで表示されています。
青森の0と、岩手、山形、宮城の0が表示されてしまっています(岩手、山形、宮城の0は重なって表示されています)。
ForEachとif文を使って、PHPで取得している各Data($s_cnt[1]~$s_cnt[6])が0のときはラベルを表示しない、とできればいいのだろうと試行錯誤していますが、全てのラベル表記がされなかったり、グラフそのものが消えてしまったりとうまくいきません。
JavaScript初心者でお恥ずかしい限りですが、有識者の方のお知恵を拝借できれば幸いです。
宜しくお願い致します。
(文字数制限に接触してしまうので、コードは最低限の部分のみ記載させて頂きます
)
JavaScript
1// Define a plugin to provide data labels:ラベルを常に表示する 2// 参考: https://beiznotes.org/data-label-on-chart-js/ 3 4Chart.plugins.register({ 5 afterDatasetsDraw: function (chart, easing) { 6 // To only draw at the end of animation, check for easing === 1 7 var ctx = chart.ctx; 8 9 chart.data.datasets.forEach(function (dataset, i) { 10 var meta = chart.getDatasetMeta(i); 11 if (!meta.hidden) { 12 meta.data.forEach(function (element, index) { 13 14 15 // テキストフォント 16 ctx.fillStyle = 'rgb(0, 0, 0)'; 17 var fontSize = 30; 18 var fontStyle = 'bold'; 19 var fontFamily = 'Helvetica Neue'; 20 ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily); 21 22 // 文字列に変換 23 var dataString = dataset.data[index].toString(); 24 25 // 文字の配置 26 ctx.textAlign = 'center'; 27 ctx.textBaseline = 'middle'; 28 var padding = 5; 29 var position = element.tooltipPosition(); 30 ctx.fillText(dataString, position.x, position.y - (fontSize / 2) - padding); 31 }); 32 } 33 }); 34 } 35}); 36 37//グラフの中身: myPieChart_1 38 var ctx = document.getElementById("myPieChart_1"); 39 var myPieChart_1 = new Chart(ctx, { 40 type: 'pie', 41 data: { 42 43 labels: ["青森", "秋田", "岩手", "山形", "宮城","福島"], 44 datasets: [{ 45 backgroundColor: [ 46 "#c0c0c0", 47 "#f4d002", 48 "#ffff51", 49 "#80c686", 50 "#509458", 51 "#1168ad", 52 ], 53 // dataは、PHPで取得し、変数に格納 54 data: ["<?php echo $s_cnt[1]; ?>", "<?php echo $s_cnt[2]; ?>", "<?php echo $s_cnt[3]; ?>","<?php echo $s_cnt[4]; ?>","<?php echo $s_cnt[5]; ?>", "<?php echo $s_cnt[6]; ?>"] 55 }] 56 }, 57 58 options: { 59 title: { 60 display: true, 61 fontSize: 30, 62 text: '東北' 63 } 64 } 65 });
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/06/18 02:44