3
這是爲協議分發創建餅圖的基本代碼。在我的.csv文件中,我有兩列,即協議名稱和百分比。我想在各個弧上添加事件。例如,當我單擊包含TCP統計信息的弧時,它應該導致另一個頁面。請幫助我如何做到這一點。我能夠爲整個餅圖添加點擊事件。如何將事件添加到由d3.js創建的餅圖的各個部分(圓弧)?
<!DOCTYPE html>
<meta charset="utf-8">
<style>
body {
font: 10px sans-serif;
}
.arc path {
stroke: #fff;
}
</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
var width = 960,
height = 500,
radius = Math.min(width, height)/2;
var color = d3.scale.ordinal()
.range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);
var arc = d3.svg.arc()
.outerRadius(radius - 10)
.innerRadius(0);
var pie = d3.layout.pie()
.sort(null)
.value(function(d) { return d.count; });
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width/2 + "," + height/2 + ")");
d3.csv("flow_count.csv", function(error, data) {
data.forEach(function(d) {
d.count = +d.count;
});
var g = svg.selectAll(".arc")
.data(pie(data))
.enter().append("g")
.attr("class", "arc");
g.append("path")
.attr("d", arc)
.style("fill", function(d) { return color(d.data.proto); });
g.append("text")
.attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
.attr("dy", ".35em")
.style("text-anchor", "middle")
.text(function(d) { return d.data.proto; });
g.on("click", function(d,i) {
window.location.href='index.html';
})
});
</script>
你確定這是正確的代碼,它看起來像這樣將借鑑?一個條形圖,而不是餅圖,就像你在說明中所說的那樣。 – 2013-02-19 22:42:42
對不起,我錯誤地添加了條形圖的代碼,現在我編輯了它,並添加了點擊導致另一個頁面的功能。弄清楚如何在單個弧上添加事件而不是整個餅圖 – Konix 2013-02-20 05:26:12
它看起來像g.on(「clicK」,...)被鏈接到個別弧,但他們都指向相同的頁面(index.html)。您需要重寫函數本身,以便重定向根據d或i而變化。 – 2013-02-20 11:28:43