show label in tooltip but not in x axis for chartjs line chart

前端 未结 5 1547
死守一世寂寞
死守一世寂寞 2020-12-08 23:34

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

相关标签:
5条回答
  • 2020-12-09 00:28

    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.

    0 讨论(0)
  • 2020-12-09 00:29

    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
    });`
    
    0 讨论(0)
  • 2020-12-09 00:31

    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/

    0 讨论(0)
  • 2020-12-09 00:40

    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/


    0 讨论(0)
  • 2020-12-09 00:40

    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.

    0 讨论(0)
提交回复
热议问题