Accepted answer

spent an hour and still can't find the proper label padding options.

my workaround is padding the labels with newlines and spaces:

['行業競爭情況', ''],
['擁有專利', ''],
'     成本控制',
'     現金流',
['', '回本期'],
['', '營運能力'],
['', '行業潛力'],
'行業網絡     ',
'團隊經驗     ',
['計劃的完整性', ''],

the outcome is acceptable:enter image description here

make it auto if you wish:

scale: {
  pointlabels: {
    callback: function (label, i, labels) {}...


whenever my pr will be merged, pointlabels.padding option will be added ;)


usually problem occurs with the first pointlabel when it is single liner you can add the callback in options as follows

pointlabels: {
      callback: function (label, index) {
        /* hack to add spacing between first pointlabel item and radar graph */
        return index == 0 && label.length == 1? [''].concat(label): label;

making pointlabel multi line text solves the problem.

edit: current version of chartjs is 2.7.3. upcoming version will probably solves this problem.


var pointlabelposition = scale.getpointposition(i, outerdistance + 5);

-> var pointlabelposition = scale.getpointposition(i, outerdistance + 15);


the pr request mentioned by @ketysek was finally merged as of march 2021.

options: {{
  scale: {
      pointlabels: {
        padding: 10, // enter number here


i use chart.js 2.6.0. i suffered from the same problem as you. i use only the radar type chart and amended as follows.

// chart.js v2.6.0
function adjustpointpositionforlabelheight(angle, textsize, position) {
		if (angle === 90 || angle === 270) {
			position.y -= (textsize.h / 2);
		} else if (angle > 270 || angle < 90) {
			position.y -= textsize.h;
		position.y -= 7;	//add source 


i have the same problem as described in the question and also was unable to find a solution using known chart options.

however, here is another workaround to achieve a behaviour similar to the desired padding (although not exactly):

ticks: {
    display: false,
    max: 11, // notice how this is +1 more than what you actually want

gridlines: {
    display: true,
    color: [ 
        "#dddddd", "#dddddd", "#dddddd", "#dddddd", "#dddddd",
        "#dddddd", "#dddddd", "#dddddd", "#dddddd", "#dddddd",
        "transparent" ], // notice how the last (additional) line is set to transparent

anglelines: {
    display: true,
    color: "#dddddd",

the idea is to add one additional grid line with a transparent color. while this does not cause any padding between the pointlabels and the anglelines, it does cause there to be one gridline worth of space between the label and the next gridline. to me, this at least looks a little better.

note that this is only feasible if you do not need to display ticks (or if you are ok with your scale showing one additional tick value that you don't actually use).

Related Query

More Query from same tag