I currently am using a line chart with chart.js, and have a label set that looks like this [\"January 2015\", \"February 2015\", \"March 2015\", \"April 2015\", \"May
To extend on potatopeelings answer, we can do:
var xLabels = this.scale.xLabels
var modVal = Math.ceil( xLabels.length / 10)
xLabels.forEach(function (label, i)
{
if (i % modVal != 0)
xLabels[i] = '';
})
to limit the number of labels (in this case 10) so your labels will never be crowded no matter how many data points you have.
For anyone looking to achieve this on Chart JS V2 the following will work:
var options = {
scales: {
xAxes: [{
afterTickToLabelConversion: function(data){
var xLabels = data.ticks;
xLabels.forEach(function (labels, i) {
if (i % 2 == 1){
xLabels[i] = '';
}
});
}
}]
}
}
Then pass the options variable as usual into a:
myLineChart = new Chart(ctx, {
type: 'line',
data: data,
options: options
});`
At Chart Options, under xAxes you can specify the maxTickLimit property to whatever you like:
xAxes: [{
ticks: {
autoSkip:true,
maxTicksLimit:3
}
}]
Fiddle : https://jsfiddle.net/p63z7zys/1/
Just extend the line chart and replace the xLabels you don't want after your initialization
Chart.types.Line.extend({
name: "LineAlt",
initialize: function (data) {
Chart.types.Line.prototype.initialize.apply(this, arguments);
var xLabels = this.scale.xLabels
xLabels.forEach(function (label, i) {
if (i % 2 == 1)
xLabels[i] = '';
})
}
});
var lineChartData = {
labels: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
datasets: [
{
fillColor: "#79D1CF",
strokeColor: "#79D1CF",
data: [59, 80, 81, 56, 55, 40, 34, 43, 43, 12, 65, 65]
}
]
};
var ctx = document.getElementById("myChart").getContext("2d");
var myLine = new Chart(ctx).LineAlt(lineChartData);
Fiddle - http://jsfiddle.net/ttz5t3dx/
This was one of the trickiest things that I deal with while using ChartJs.
I'm going to share my solution: I just played with the chart options. First I will define some properties for my xAxe. Note that I'm formatting the label using the callback:
scales: {
xAxes: [{
id: "x-", stacked: false, ticks: {
autoSkip: false, callback: (label) => { return label + "TEST" } }
}
]}
To format the tooltip title I'm going to use callbacks options for the tooltips:
tooltips: {
callbacks: {
title : (tooltipItems, data) => {
var labelIndex = tooltipItems[0].index;
var realLabel = data.labels[labelIndex];
return realLabel + "TOOLTIP";
}
}
}
Using the chart options like that, I'm able to show different content for the x-axis labels and the corresponding tooltip titles:
enter image description here
You can find the full sample here.
Hope this helps.