【问题标题】:how to always show label in chartjs without mouseover?如何在没有鼠标悬停的情况下始终在chartjs中显示标签?
【发布时间】:2017-09-28 04:22:03
【问题描述】:

我正在使用最新版本的 Chart Js。我需要始终在图表中显示标签(没有鼠标悬停)。是否可以?如果是,请帮助我提供工作示例代码。

谢谢。

我当前的 Chartjs 代码:

var ctx = $("#myChart");
var label = ctx.data('clabel').split(',');
var val = ctx.data('cval').split(',');


var myChart = new Chart(ctx, {
    type: 'line',
    data: {
        labels: label,
        datasets: [{
            label: 'Daily Capital',
            data: val,
            backgroundColor: [
                'rgba(0, 153, 34, 0.5)',
            ],
            borderColor: [
                'rgba(0, 153, 34, 1);',
            ],
            borderWidth: 2
        }]
    },
    options: {
        responsive: true,
        maintainAspectRatio: false,
        legend: {
            display: false,
        },
        animation: {
            duration: 0, // general animation time
        },
        hover: {
            animationDuration: 0, 
        },
        responsiveAnimationDuration: 0, // animation duration after a resize
        elements: {
            line: {
                tension: 0, // disables bezier curves
            },
        },
        tooltips: {
            callbacks: {
                label: function(tooltipItem, data){
                    return '£' + tooltipItem.yLabel;
                },
                title: function(tooltipItem, data){
                    return '';
                },
            }
        },
        scales: {
            yAxes: [{
                ticks: {
                    beginAtZero: true
                }
            }]
        }
    }       
});

我希望有人可以提供帮助。提前谢谢你

【问题讨论】:

    标签: javascript charts chart.js


    【解决方案1】:

    这可以通过添加options onAnimationCompletetooltipevents 来解决。

    onAnitmationComplete 函数调用showToolTip 方法来显示tooltips,就像悬停事件一样。

    通常tooltipevents 被定义为显示tooltips 但这里需要传递一个空数组。检查下面的小提琴示例以获取折线图。

    var options = {
      tooltipTemplate: "<%= value %>",
    
      showTooltips: true,
    
      onAnimationComplete: function() {
        this.showTooltip(this.datasets[0].points, true);
      },
      tooltipEvents: []
    }
    

    注意:此方法不支持折线图和条形图中的多数据集,但支持饼图中的多数据集

    var data_line = {
      labels: ["January", "February", "March", "April", "May", "June", "July"],
      datasets: [{
        label: "My First dataset",
        fillColor: "rgba(220,220,220,0.2)",
        strokeColor: "rgba(220,220,220,1)",
        pointColor: "rgba(220,220,220,1)",
        pointStrokeColor: "#fff",
        pointHighlightFill: "#fff",
        pointHighlightStroke: "rgba(220,220,220,1)",
        data: [65, 59, 80, 81, 56, 55, 40]
      }]
    };
    
    
    var options = {
      tooltipTemplate: "<%= value %>",
    
      showTooltips: true,
    
      onAnimationComplete: function() {
        this.showTooltip(this.datasets[0].points, true);
      },
      tooltipEvents: []
    }
    
    var context = $('#chart3').get(0).getContext('2d');
    var chart = new Chart(context).Line(data_line, options);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min.js"></script>
    <div id="chartContainer">
      <canvas id="chart3" width="500" height="500"></canvas>
    </div>

    【讨论】:

    【解决方案2】:
    options: {
                 legend: {
                   display: false
                 },
                 hover: {
                   animationDuration: 0
                 },
                 animation: {
                   onComplete: function() {
                     const chartInstance = this.chart,
                       ctx = chartInstance.ctx;
    
                     ctx.font = Chart.helpers.fontString(
                       18,
                       Chart.defaults.global.defaultFontStyle,
                       Chart.defaults.global.defaultFontFamily
                     );
                     ctx.textAlign = "center";
                     ctx.textBaseline = "bottom";
    
                     this.data.datasets.forEach(function(dataset, i) {
                       const meta = chartInstance.controller.getDatasetMeta(i);
                       meta.data.forEach(function(bar, index) {
                         const data = dataset.data[index];
                         ctx.fillStyle = "#000";
                         ctx.fillText(data, bar._model.x, bar._model.y - 2);
                       });
                     });
                   }
                 },
                 tooltips: {
                   enabled: true
                 },
                 responsive: true,
                 scales: {
                   xAxes: [
                     {
                       display: true,
                       gridLines: {
                         drawOnChartArea: false
                       }
                     }
                   ],
                   yAxes: [
                     {
                       display: true,
                       gridLines: {
                         drawOnChartArea: false
                       },
                       ticks: {
                         precision: 0
                       }
                     }
                   ]
                 }
               }
    

    【讨论】:

    • 我怎样才能编辑它以便它只在最后一个数据条目上显示工具提示?我有一个气象站,每 30 分钟记录一次并将其保存在 sql 数据库中。然后我使用这些数据来填充我的图表。但我只想要最近阅读/日志的工具提示。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2022-01-25
    • 2019-11-14
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多