LoginSignup
3
3

More than 3 years have passed since last update.

円グラフを描画したらラベルが被ってムカついた話。

Last updated at Posted at 2020-02-05

HTML上に円グラフを描画する必要があって、描画してみたらしてみたで偏ったデータでラベルが重なってストレスがたまったのでその記録。

【やりたかったこと】
円グラフを描画する。
とりあえず、chart.jsで円グラフを描画してみる。
(前任者がこれを採用してたのがすべての元凶なのだろうか)
cahrt.js :https://github.com/chartjs/Chart.js/releases/tag/v2.9.3
Labelのプラグイン:https://github.com/emn178/chartjs-plugin-labels

【実装①】

drowChart.js
var data = {
    datasets:[{
        data:[90,1,1,1],
            backgroundColor: ["#009900","#009990","#909990","#300030"]
        }],
        labels: ["一人ぼっちは…","寂しいもんな","いいよ","一緒にいてやるよ"],
    }
    var ctx = document.getElementById('myChart').getContext('2d');
    var myPieChart = new Chart(ctx,{
        type: 'pie',
        data: data,
        options: {
            legend: {
                display: false
            },
            plugins: {
                labels: {
                    render: 'label',
                    position:'outside'
                }
            }
        }    
    });
index.html
<canvas id="myChart"></canvas>

【実装①の結果】
①.png

ラベルがめっちゃ被った・・・

ということで、色々と検索。
やっぱり同じようなことで悩んでる方はいるようだった。
http://danlec.com/st4k#questions/45352194
質問者が「パーフェクトだ!」みたいな返事をしている回答があったので、
さては天才だな?って思ってこの通りに実装してみた。

【実装②】

drowChart.js
angular.module("app", ["chart.js"]).controller("ChartCtrl", function($scope) {
    $scope.labels = ["一人ぼっちは…","寂しいもんな","いいよ","一緒にいてやるよ"];
    $scope.data = [90,1,1,1];
    $scope.options = {
        pieceLabel: {
            render: 'label',
            fontColor: '#000',
            position: 'outside',
            segment: true
        }
    };
});
index.html
<div ng-app="app" ng-controller="ChartCtrl">
        <canvas id="pie" class="chart chart-pie" chart-data="data" chart-labels="labels" chart-options="options"></canvas> 
</div>

【実装②の結果】
②.png

ラベル消えたが(#^ω^)ピキピキ

【解決法】
chart.jsを切り捨てて、d3.js + d3pie.js を使用する。

D3.js :https://d3js.org/
d3pie:https://github.com/benkeen/d3pie

drowChart.js
var pie = new d3pie("myChart", {
    data: {
        content:[
            {label:"一人ぼっちは…",value:90},
            {label:"寂しいもんな",value:1},
            {label:"いいよ",value:1},
            {label:"一緒にいてやるよ",value:1}
        ]
    },
    labels:{
        percentage: {
            fontSize: 0
        }
    },
    tooltips:{
        enabled: true,
        type: "placeholder",
        string: "{label}: {value}"
    }
});
index.html
<div id="myChart"></div>

【結果】

③.png

できたー(^^♪

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3