2014-01-28 4 views
11

Я использую Chart.js для отображения радарной диаграммы. Моя проблема в том, что некоторые ярлыки очень длинные: диаграмма не может быть отображена или она кажется очень маленькой.Chart.js и длинные этикетки

Итак, есть ли способ разбить линии или назначить максимальную ширину меток?

Благодарим за помощь!

+0

Просьба представить ваш код. –

ответ

0

Кажется, вы могли бы быть на самом деле говорить о ярлыках данных, а не масштабные этикетки. В этом случае вы хотите использовать опцию pointLabelFontSize. Ниже пример:

var ctx = $("#myChart").get(0).getContext("2d"); 

var data = { 
    labels: ["Eating", "Sleeping", "Coding"], 
    datasets: [ 
    { 
     label: "First", 
     strokeColor: "#f00", 
     pointColor: "#f00", 
     pointStrokeColor: "#fff", 
     pointHighlightFill: "#fff", 
     pointHighlightStroke: "#ccc", 
     data: [45, 59, 90] 
    }, 
    { 
     label: "Second", 
     strokeColor: "#00f", 
     pointColor: "#00f", 
     pointStrokeColor: "#fff", 
     pointHighlightFill: "#fff", 
     pointHighlightStroke: "#ccc", 
     data: [68, 48, 40] 
    } 
    ] 
}; 

// This is the important part 
var options = { 
    pointLabelFontSize : 20 
}; 

var myRadarChart = new Chart(ctx).Radar(data, options); 

Наконец, вы можете играть с размерами вашего < холста> элемент, как я обнаружил, иногда давая лепестковая диаграмма более высоты помогает автоматическое масштабирование всего.

1

К сожалению, для этого решения пока нет (5 апреля 2016 года). Есть несколько вопросов по Chart.js, чтобы иметь дело с этим:

Это обходной путь: Remove x-axis label/text in chart.js

24

Для Chart.js 2.0+ вы можете использовать массив в качестве метки:

Цитирования Документов: «Usage: Если метка представляет собой массив, в отличие от строки то есть [[ "Июнь", "2015"], "Июль"], то каждый элемент рассматривается как отдельные линии.»

var data = { 
    labels: [["My", "long", "long", "long", "label"], "another label",...], 
    ... 
} 
+0

Не самое чистое решение, но оно сработало для меня. –

+0

@ Yeats - Вышеупомянутое решение работает в версии 2.3 (диаграмма вертикального типа, метки по типу x-оси). Итак, как насчет повторной проверки вашего кода вместо профанации по отношению к Аривану для этого, может быть, не изящного, но все же функционального решения? – Ross

11

с ChartJS 2.1.6 и используя @ArivanBastos answer

Просто передайте длинную метку следующей функции, она вернет вашу метку в форме массива, каждый элемент соответствует вашей назначенной maxWidth.

/* takes a string phrase and breaks it into separate phrases 
    no bigger than 'maxwidth', breaks are made at complete words.*/ 

function formatLabel(str, maxwidth){ 
    var sections = []; 
    var words = str.split(" "); 
    var temp = ""; 

    words.forEach(function(item, index){ 
     if(temp.length > 0) 
     { 
      var concat = temp + ' ' + item; 

      if(concat.length > maxwidth){ 
       sections.push(temp); 
       temp = ""; 
      } 
      else{ 
       if(index == (words.length-1)) 
       { 
        sections.push(concat); 
        return; 
       } 
       else{ 
        temp = concat; 
        return; 
       } 
      } 
     } 

     if(index == (words.length-1)) 
     { 
      sections.push(item); 
      return; 
     } 

     if(item.length < maxwidth) { 
      temp = item; 
     } 
     else { 
      sections.push(item); 
     } 

    }); 

    return sections; 
} 
+0

Действительно приятно! Спасибо Fermin +1 – NickyTheWrench

+0

отлично, добавьте его в проект, ядро ​​или [плагин] (http://www.chartjs.org/docs/latest/developers/plugins.html) –

+0

Кстати, также должно быть ясно, что ' maxwidth' переходит к символам, а не к пикселям или любым другим измерениям –

 Смежные вопросы

  • Нет связанных вопросов^_^