Jacob Zielinski
Jacob Zielinski

Reputation: 248

Chart.js, change color of specific ticks

I have a chart that ticks are barely distinguishable.

Is there a way to target a specific ticks and change the color, font-size or background, to appear more visible?

Solution I could also set for, would be way to hide every tick that indicates hours but leave the tool-tip.

I've tried to push empty string in place of time, but that unfortunately also disables tool-tips and there is no way to tell the time of particulate value.

( chart.js ver2.8.0) enter image description here

CODE:

 var chartDatesArray = ["NOV 25","01:00","02:00","03:00"... "23:00","Nov 26"];
 var chartCountArray = [10,20,30,40...50,60];

var myChart = new Chart(ctx, {
type: 'line',
data: {
    labels: chartDatesArray,
    datasets: [
        {
            data: chartCountArray,
            backgroundColor: gradient,
            borderColor: "rgb(27,163,198)",
            fill: true,
            lineTension: 0,
            radius: 1,
            borderWidth: 2,
            borderJoinStyle: 'miter',
            pointBorderColor: "rgba(75,192,192,1)",
            pointBackgroundColor: "#fff",
            pointBorderWidth: 1,
            pointHoverRadius: 5,
            pointHoverBackgroundColor: "rgba(75,192,192,1)",
            pointHoverBorderColor: "rgba(220,220,220,1)",
            pointHoverBorderWidth: 2,
            pointRadius: 1,
            pointHitRadius: 10,
        },
    ],
},
options: {


    scales: {
        xAxes: [{
            ticks: {
                display: true,
                fontSize: 12,
            },
            gridLines: {
                display: true,
                drawBorder: false,
            }
        }],
        yAxes: [{
            ticks: {
                precision: 0,
                display: true,
                fontSize: 12,
                beginAtZero: true
            },
            gridLines: {
                display: true,
                drawBorder: true,
            }
        }]
    },

    legend: {
        display: false,
        labels: {
            fontSize: 12,
        },

    },
    tooltips: {

        enabled: true,
        intersect: false,
    },
    display: true,
    responsive: true,
    maintainAspectRatio: false,
},
});

Upvotes: 7

Views: 12083

Answers (3)

Jared C.
Jared C.

Reputation: 31

Hopefully this will prove useful for someone in the future but this is the way I was able to do it:

scales: {
      x: {
        type:     'linear',
        position: 'bottom',
        title: {
          text:    'Minutes from start',
          display: true
        }   
      },
      y: {
        type: 'linear',
        display: true,
        position: 'left',
        suggestedMax: 14,
        title: {
          text:    'pH',
          display: true
        },
        ticks: {
          color: (c) => {if(c['tick']['value'] == 7) return 'red'; else return 'black';}, // this here
        },
      },

In the ticks section of a scale you can create a function in the color property that'll return a color based on the tick

Upvotes: 3

For Chart JS 3.5.1 I've got this in my config:

{
    options: {
        scales: { 
            x: {
                ticks: {
                    color: ['black', 'black', 'blue']
                }
            }
        }
    }
}

I'm using TypeScript and it looks like the typing is incorrect so I had to // @ts-igone it so it can accept a list of strings.

Here is the result:

result of providing a list of strings for color

Upvotes: 2

Micha
Micha

Reputation: 924

you can use a array for xAxes fontColor see example:

<canvas id="graph-canvas" width="800" height="400"></canvas>

    <script>
  var canvas = document.getElementById('myChart');
var data = {
    labels: ["January", "February", "March", "April", "May", "June"],
    datasets: [
        {
            label: "My First dataset",
            backgroundColor:
            [ "rgba(255,99,132,0.4)",
            "rgba(255,99,132,0.4)",
            "rgba(255,99,132,0.4)",
            "rgba(25,25,255,0.4)",
            "rgba(25,25,255,0.4)",
            "rgba(25,25,255,0.4)"],
            hoverBorderColor: "rgba(255,99,132,1)",
            data: [65, 59, 20, 81, 56, 55],
        }
    ]
};
var option = {
     scales: {
            yAxes: [{
                ticks: {
                    beginAtZero:true,
                    fontColor: 'red'
                },
            }],
          xAxes: [{
                ticks: {
                    fontColor:['green','red','blue','yellow','green','red'],
                    callback: function(value, index, values) {
                    if(index === 3) {
                      return '**'+value+'**';
                    } 
                    else {
                        return value;
                        }
                    }
                },
            }]
  }
};

var myBarChart = Chart.Line(canvas,{
    data:data,
  options:option
});

</script>

Here is a fiddle

Upvotes: 8

Related Questions