nvd3 piechart.js - How to edit the tooltip?

前端 未结 9 1610
别那么骄傲
别那么骄傲 2020-11-27 06:09

I\'m using nvd3\'s piechart.js component to generate a piechart on my site. The provided .js file includes several var\'s, as follows:

var margin = {top: 30,         


        
相关标签:
9条回答
  • 2020-11-27 06:39
    my_chart = nv.models.multiBarChart()
      .tooltip(function(key, x, y, e, graph) {
        return '<h3>' + key + '</h3>' +
               '<p>' +  y + ' on ' + x + '</p>';
      });
    
    0 讨论(0)
  • 2020-11-27 06:41

    chart:{
    interactive:true,
    tooltips: true,
    tooltip: {
      contentGenerator: function (d) {
        return '<h3>PUT YOUR DATA HERE E.g. d.data.name</h3>'
      }
    }
    Thank You and Best Regards Abhay Patidar

    0 讨论(0)
  • 2020-11-27 06:42

    I have just got the same problem, with nvd3 1.8.1, and this is the solution I've found.

    Without the option useInteractiveGuideline you could simply declare your tooltip generating function in chart.tooltip.contentGenerator(function (d){ YOUR_FUNCTION_HERE}):

    The argument d is given by nvd3 when calling the tooltip, and it has three properties :

    • value: the x-axis value for the cursor position
    • index: the index in chart's datum corresponding to the the cursor position
    • series: an array containing, for each item in the chart :
      • key: the legend key for that item
      • value: the y-axis value for that item at the cursor position
      • color: the legend color for that item

    So here you have an example:

    chart.tooltip.contentGenerator(function (d) {
              var html = "<h2>"+d.value+"</h2> <ul>";
    
              d.series.forEach(function(elem){
                html += "<li><h3 style='color:"+elem.color+"'>"
                        +elem.key+"</h3> : <b>"+elem.value+"</b></li>";
              })
              html += "</ul>"
              return html;
            })
    

    Important note

    When the option useInteractiveGuideline is used, the chart.tooltip object isn't used to generate the tooltip, you must instead use the chart.interactiveLayer.tooltip, i.e.:

    this.chart.interactiveLayer.tooltip.contentGenerator(function (d) { ... })
    

    I hope the answer is useful for you, even if late.

    0 讨论(0)
  • 2020-11-27 06:42

    To add to previous answers, sometimes you want to use the data of the series and not only of x and y. For instance when

    data = {'values': [{'month': 1, 'count': 2}, ...], 'key': 'test' }
    

    For those situations, use

    .tooltip(function(key, x, y, e, graph) {
             var d = e.series.values[e.pointIndex];
             return '<h3>' + e.series.key + '</h3><p>' + d.month.toString() + ...;
     });
    

    e.series is the particular series the mouse is hovering, e.pointIndex is the index on the values of the series. Here e.series.key == key, but I used to empathise what is e.series.

    0 讨论(0)
  • 2020-11-27 06:43
    var chart = nv.models.multiBarChart();
    
    chart.tooltip.contentGenerator(function (obj) {
                    return JSON.stringify("<b>HOHO</b>")
                })
    

    This worked for me...

    0 讨论(0)
  • 2020-11-27 06:44

    I think you're missing the 'x' parameter in your tooltip function. The format of the function call is:

    function(key, x, y, e, graph)
    
    0 讨论(0)
提交回复
热议问题