How to disable a tooltip for a specific dataset in ChartJS

后端 未结 4 1895
忘了有多久
忘了有多久 2020-12-10 12:23

I displaying a chart where two types are included. Now I want to hide the toolbar for one dataset. I saw some discussion like this on GitHub, but this doesn\'t bring me furt

4条回答
  •  春和景丽
    2020-12-10 12:54

    As you already concluded, there isn't a way to configure chart.js out of the box to only show tooltips of specific datasets. However, you can use the plugin interface to create a plugin that can provide this functionality.

    Here is a plugin that I created for your scenario that let's you configure which datasets you want the tooltip to display for.

    Chart.plugins.register({
      // need to manipulate tooltip visibility before its drawn (but after update)
      beforeDraw: function(chartInstance, easing) {
        // check and see if the plugin is active (its active if the option exists)
        if (chartInstance.config.options.tooltips.onlyShowForDatasetIndex) {
          // get the plugin configuration
          var tooltipsToDisplay = chartInstance.config.options.tooltips.onlyShowForDatasetIndex;
    
          // get the active tooltip (if there is one)
          var active = chartInstance.tooltip._active || [];
    
          // only manipulate the tooltip if its just about to be drawn
          if (active.length > 0) {
            // first check if the tooltip relates to a dataset index we don't want to show
            if (tooltipsToDisplay.indexOf(active[0]._datasetIndex) === -1) {
              // we don't want to show this tooltip so set it's opacity back to 0
              // which causes the tooltip draw method to do nothing
              chartInstance.tooltip._model.opacity = 0;
            }
          }
        }
      }
    });
    

    With the new plugin in place, you can now use a new property in the tooltips config called onlyShowForDatasetIndex that accepts an array of dataset indexes that the tooltip should display for.

    tooltips: {
      enabled: true,
      mode: 'single',
      // new property from our plugin
      // configure with an array of datasetIndexes that the tooltip should display for
      // to get the datasetIndex, just use it's position in the dataset [] above in the data property
      onlyShowForDatasetIndex: [0, 1],
      callbacks: {
        label: function(tooltipItems, data) {
          return data.datasets[tooltipItems.datasetIndex].label + ': ' + tooltipItems.yLabel + ' %';
        }
      }
    }
    

    Where the index value maps to the position of the dataset in the datasets property.

    Take a look at this codepen to see this in action. Notice the tooltips only show on the bar charts but not the line (since we did not include this dataset in the new configuration property).

提交回复
热议问题