2012-09-14 130 views
37

我使用nvd3的piechart.js組件在我的網站上生成一個餅圖。所提供的.js文件包括幾個變種的,如下:nvd3 piechart.js - 如何編輯工具提示?

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和保證金):

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本身;我需要保持該文件通用以用於多個小部件。

雖然我們在這樣做,有沒有辦法讓整個工具提示變成可點擊的鏈接?

+4

我不是nvd3專家,剛開始玩它。我和你有同樣的問題,你要找的是:.tooltipContent(function(key,y,e,graph){return'Some String'})*當我們在這時,有什麼方法我可以使整個工具提示 成爲一個可點擊的鏈接?*您可以返回HTML提示的任何HTML,但是當它懸停時出現/消失時,您很難點擊它。 – rotoglup

回答

55

這樣就忽略它的工作肯定

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

或者

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

+1替代解決方案。我一直在使用'.tooltip(..)'來製作很多NVD3圖表,並且只需要使用'.tooltipContent(..)'作爲lineChart.js – shabeer90

+0

這也適用於我。 – ramiro

+0

你能告訴我,我怎麼可以修改這個方法爲NVD3的線圖Coz tooltipcontent在這種情況下不工作? –

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

剛把這個從-1改爲0.它爲什麼被低估?這很有幫助。 – nickcoxdotme

+2

這不是我,但我猜這是因爲答案是不正確的 - 問題是關於餅圖,工具提示不適用於餅圖,它必須是tooltipContent,並且不應該有一個x參數 – CupawnTae

+1

While這個問題可能是針對餅圖的,我很感謝這裏加入了。我的搜索更一般。 –

2

我想你錯過了你的提示功能的 'X' 參數。函數調用的格式爲:

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

這是不正確的 - 餅圖中沒有x參數;問題是它應該是.tooltipContent,如user1847371的答案 – CupawnTae

15

自定義工具提示不能與「useInteractiveGuideline」一起存在。

+0

謝謝。訣竅 – 2015-02-15 22:01:38

+3

現在可以使用版本1.8.1(https://github.com/novus/nvd3/tree/v1.8.1-alpha)中的交互式指導原則定製內容。 – Pim

+0

上面的鏈接是壞的,也許:https://github.com/novus/nvd3/tree/v1.8.1 –

5

要添加到以前的答案,有時您想要使用該系列的數據,而不僅僅是xy的數據。例如,當

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什麼。

34

我剛剛得到了同樣的問題,與nvd3 1.8.1,這是我找到的解決方案。

沒有選項useInteractiveGuideline你可以簡單地宣佈你的提示生成功能chart.tooltip.contentGenerator(function (d){ YOUR_FUNCTION_HERE})

d由nvd3調用提示時給出的說法,它有三個屬性:

  • value:在光標位置的x軸值
  • index:圖表的datum中的索引對應於光標位置
  • series:陣列含有,圖表中的每個文件:
    • key:在光標位置
    • color該項目的y軸值:該項目
    • value圖例鍵:該項目

所以這裏的傳奇色彩你有一個例子:

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,即:

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

我希望答案對你有用,即使遲到。

+1

很好的答案,非常有用.. :-) –

+0

聖地獄,這是令人沮喪的試圖找出爲什麼chart.tooltip沒有工作 –

0
var chart = nv.models.multiBarChart(); 

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

這個工作對我來說...

7

如果你碰巧使用了Angular NVD3包裝,設置自定義消息的方式是通過圖表選項,簡單地說:

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

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

+0

請編輯你的答案,否則你可能會被低估。現在,它只是一個沒有上下文的建議。請參閱StackOverflow上的[如何編寫一個合適的答案](http://stackoverflow.com/help/how-to-answer)。 – jacefarm

相關問題