回答
沒有任何NVD3圖表選項爲忽略這種行爲,但你可以直接通過騎單擊事件處理程序。但是,堆疊面積圖會變得有點複雜...
NVD3使用d3.dispatch
對象來處理自定義事件。用戶點擊和鼠標懸停以及相關操作全部轉換爲這些自定義事件。
如果您想在自定義事件之後發生某個功能,可以調用調度對象的.on(eventName, function)
方法。如果函數參數爲null
,則取消附加到該名稱的任何先前的事件處理函數。 (如果您希望同一個事件觸發多個函數,則可以使用"eventName.namespace"
形式的字符串作爲第一個參數,將「名稱空間」添加到事件名稱中;然後只有在再次調用on
時纔會取消該函數使用完全相同的事件名稱字符串。)
因此,要取消您不想要的行爲,您需要檢查源代碼以找出觸發該行爲的自定義事件的名稱,然後調用使用該名稱和空函數調度對象的on
方法。
這是它變得複雜的地方。實際上有多個不同的事件會導致數據系列被打開和關閉。如果你點擊該區域,如果你點擊圖例,或者如果你點擊鼠標懸停時出現的一個散點圓,你會得到相同的行爲。所有這些事件都必須被覆蓋。它們甚至不是同一個調度對象的一部分:主圖表對象本身有一個調度對象,用於處理通過單擊圖表佈局控件創建的完整重繪事件,但堆疊區域上的點擊事件由內部繪圖功能繪製繪圖區域,散點上的點擊事件由內部繪圖功能處理,並且圖例上的點擊事件在圖例功能中處理。
而這裏是它得到真的複雜。當整體圖表更新或其佈局更改時,繪圖區域和散點圖的內部圖表繪圖功能會被主圖表功能覆蓋。這意味着所有的事件都會重置爲NVD3默認值。
因此,您不僅必須禁用所有觸發行爲的事件,還必須修改更新功能以再次禁用它們。並且因爲更新功能本身每更新一次都會重置,所以您需要將更新功能的修改作爲用於禁用事件的功能的一部分。
**更新函數只是使用相同的容器選擇重新調用整個圖表繪圖函數。圖表函數的第一行之一創建更新函數。*
下面的代碼的基礎上,對nvd3.org live code page的堆積面積例如:
nv.addGraph(function() {
/* Set up chart as normal */
var chart = nv.models.stackedAreaChart()
.x(function(d) { return d[0] })
.y(function(d) { return d[1] })
.clipEdge(true)
//.useInteractiveGuideline(true)
;
chart.xAxis
.showMaxMin(false)
.tickFormat(function(d) { return d3.time.format('%x')(new Date(d)) });
chart.yAxis
.tickFormat(d3.format(',.2f'));
d3.select('#chart svg')
.datum(data)
.transition().duration(500).call(chart);
/* create a function to disable events and modify the update function */
function disableAreaClick() {
//I'm probably over-killing with the amount of events I'm cancelling out
//but it doesn't seem to have any side effects:
chart.stacked.dispatch.on("areaClick", null);
chart.stacked.dispatch.on("areaClick.toggle", null);
chart.stacked.scatter.dispatch.on("elementClick", null);
chart.stacked.scatter.dispatch.on("elementClick.area", null);
chart.legend.dispatch.on("legendClick", null);
chart.legend.dispatch.on("legendDblclick", null);
chart.legend.dispatch.on("stateChange", null);
if (chart.update) {
//if the chart currently has an update function
//(created when the chart is called on a container selection)
//then modify it to re-call this function after update
var originalUpdate = chart.update;
//assign the update function to a new name
chart.update = function(){
originalUpdate();
disableAreaClick();
}
}
}
//Call your function, disabling events on current chart and future updates:
disableAreaClick();
//this must be called *after* calling the chart on a selection
//so that it has an update function to modify
nv.utils.windowResize(chart.update);
return chart;
});
你現在可以做的最好的就是禁用圖例。 你可以做,使用chart.showLegend(false)
,或者像一個選項:
var options = {
showLegend: false
};
,如果你不介意不響應任何鼠標事件一個討厭的解決方案:
pointer-events: none;
使用這在元素上。
- 1. nvd3在堆積面積圖上繪製多個系列
- 2. 防止角度nvD3中的單擊事件堆積面積圖
- 3. highcharts堆積面積
- 4. 圖形異常堆積面積圖ggplot2
- 5. 角NVD3圖表:無法隱藏X軸和Y軸的堆積面積圖
- 6. JFreeChart堆積面積圖不連續
- 7. fillColor在面積圖中堆積
- 8. R中的灰度堆積面積圖
- 9. 用matplotlib創建100%堆積面積圖
- 10. 堆積面積圖中Plot.ly和R
- 11. 設置ylim與堆積面積圖
- 12. 創建堆積面積圖上圈
- 13. 堆積面積直方圖中的R
- 14. 堆積面積圖和在matplotlib
- 15. D3.js中的堆積面積圖
- 16. nvd3堆疊面積圖看起來不好如何解決?
- 17. nvd3捕獲堆棧面積圖上的單擊事件
- 18. Highcharts:connectNulls ==假堆疊面積圖
- 19. Highcharts堆疊面積圖
- 20. 圖堆積Barplot
- 21. ggplot2中的堆疊面積圖返回爲堆積線
- 22. D3堆疊面積圖堆棧函數
- 23. 堆積面積圖中的高度圖鑽取
- 24. 堆積條形圖
- 25. 堆積條形圖
- 26. 圖像堆積python
- 27. 與Dygraphs堆積圖
- 28. KendoUI的堆積圖
- 29. d3.js堆積圖
- 30. 堆積條形圖
在不修改源代碼的情況下,您可以最接近地完全禁用圖例。 –
如何做到這一點? – Deadly
看看這個http://stackoverflow.com/questions/19009959/how-to-disable-legend-in-nvd3-or-limit-its-size/19010011#19010011 – shabeer90