Подтвердить что ты не робот

Nvd3 piechart.js - Как редактировать всплывающую подсказку?

Я использую компонент nvd3 piechart.js для создания piechart на моем сайте. Предоставленный .js файл включает в себя несколько var, следующим образом:

var margin = {top: 30, right: 20, bottom: 20, left: 20}
    , width = null
    , height = null
    , showLegend = true
    , color = nv.utils.defaultColor()
    , tooltips = true
    , tooltip = function(key, y, e, graph) {
        return '<h3>' + key + '</h3>' +
               '<p>' +  y + '</p>'
      }
    , noData = "No Data Available."
    , dispatch = d3.dispatch('tooltipShow', 'tooltipHide')
;

В моем встроенном js я смог переопределить некоторые из этих переменных, например, (переопределяя showLegend и margin):

var chart = nv.models.pieChart()
    .x(function(d) { return d.label })
    .y(function(d) { return d.value })
    .showLabels(false)
    .showLegend(false)
    .margin({top: 10, right: 0, bottom: 0, left: 0})
    .donut(true);

Я попытался переписать подсказку так же:

.tooltip(function(key, y, e, graph) { return 'Some String' })

но когда я это делаю, мой пикчер вообще не отображается. Почему я не могу перезаписать подсказку здесь? Есть ли другой способ сделать это? Мне действительно не нужно было вообще редактировать piechart.js; Мне нужно сохранить этот файл общим для использования в нескольких виджетах.

И пока мы на нем, есть ли способ сделать всю подсказку доступной для ссылки ссылкой?

4b9b3361

Ответ 1

Просто переопределить таким образом, он будет работать определенно

function tooltipContent(key, y, e, graph) {
            return '<h3>' + key + '</h3>' +'<p>' + y + '</p>' ;
        }

или

tooltipContent(function(key, y, e, graph) { return 'Some String' })

Ответ 2

У меня только та же проблема, с nvd3 1.8.1, и это решение, которое я нашел.

Без опции useInteractiveGuideline вы можете просто объявить свою функцию создания всплывающей подсказки в chart.tooltip.contentGenerator(function (d){ YOUR_FUNCTION_HERE}):

Аргумент d задается nvd3 при вызове всплывающей подсказки и имеет три свойства:

  • value: значение оси x для позиции курсора
  • index: индекс в таблице datum, соответствующий позиции курсора
  • series: массив, содержащий для каждого элемента диаграммы:
    • key: ключ легенды для этого элемента
    • value: значение оси y для этого элемента в позиции курсора
    • color: цвет легенды для этого элемента

Итак, у вас есть пример:

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;
        })

Важное примечание

Когда используется опция useInteractiveGuideline, объект chart.tooltip не используется для создания всплывающей подсказки, вместо этого вы должны использовать chart.interactiveLayer.tooltip, i.e.:

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

Я надеюсь, что ответ полезен для вас, даже если поздно.

Ответ 3

Индивидуальная всплывающая подсказка не может существовать с помощью "useInteractiveGuideline".

Ответ 4

Если вы используете обертку Angular NVD3, способ настроить настраиваемое сообщение через параметры диаграммы просто:

$scope.options = {
  chart: {
  ...
  tooltip: {
      contentGenerator: function(d) {
          return d.series[0].key + ' ' + d.series[0].value;
      }
  },
  ...
  }
};

Ответ 5

Чтобы добавить к предыдущим ответам, иногда вы хотите использовать данные серии, а не только x и y. Например, если

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

В этих ситуациях используйте

.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 - это конкретный ряд, в котором мышь колеблется, e.pointIndex - это индекс по значениям ряда. Здесь e.series.key == key, но я использовал эмпатию, что есть e.series.

Ответ 6

my_chart = nv.models.multiBarChart()
  .tooltip(function(key, x, y, e, graph) {
    return '<h3>' + key + '</h3>' +
           '<p>' +  y + ' on ' + x + '</p>';
  });

Ответ 7

Я думаю, что вы не указали параметр "x" в своей функции всплывающей подсказки. Формат вызова функции:

function(key, x, y, e, graph)

Ответ 8

var chart = nv.models.multiBarChart();

chart.tooltip.contentGenerator(function (obj) {
                return JSON.stringify("<b>HOHO</b>")
            })

Это сработало для меня...

Ответ 9

interactive:true,
tooltips: true,
tooltip: {
  contentGenerator: function (d) {
    return '<h3>PUT YOUR DATA HERE E.g. d.data.name</h3>'
  }
}