Задать вопрос
Ответы пользователя по тегу D3.js
  • C3.js Doughnut Chart как показать процент доли не в доли, а рядом?

    @liltrill Автор вопроса
    После множества часов поиска и доработки решений которые были найдены на зарубежных форумах я могу ответить на свой вопрос.

    Для того чтобы позиционировать label(это текст который находится в доли процента), необходимо повесить событие onrendered в объекте который передается в c3.js при его создании, после чего находим все label.

    Узнаем координаты label для теоремы пифагора, после чего делаем нужные расчеты(я не силен в геометрии/тригонометрии так что просто взял готовую формулу и даже не буду ее описывать так как не смогу пояснить за нее :) )

    onrendered: function() {
         // Поиск всех label
         d3.selectAll(".c3-chart-arc text").each(function(v) {
              // Получение label
               let label = d3.select(this),
              // Получение координат label (По дефолту label находится в середине доли, вот эти нам 
              // координаты и нужны)
               matrix = label._groups[0][0].transform.animVal[0].matrix;
    
               let x = matrix.e,
                    y = matrix.f;
    
               // Ну тут вычисления :)
               let h = Math.sqrt(x*x + y*y);
    
                // 414/414 - ширина и высота svg
                // 15 - отступ от доли
                let labelr = Math.min(414, 414) / 2 + 15;
    
                // Тут я поясню только за labelr, так как не шарю за формулы, labelr - расстояние от 
                // середины графика до конечного положения, с выбранным отступом от доли
                label.attr("transform", "translate("+ (x/h * labelr) +  ',' + (y/h * labelr) +")");
         });
    }
    Ответ написан