2012-05-11 11 views
12

Tôi là một lập trình viên tân binh, vì vậy đây có thể là một lập trình dễ dàng cho hầu hết các bạn. Tôi cần những dòng mã nào cho nhãn và/hoặc văn bản di chuột qua cho biểu đồ Hợp âm này?Thêm nhãn vào sơ đồ hợp âm D3

http://mbostock.github.com/d3/ex/chord.html

enter image description here

tôi cần nó để hiển thị tên của các loại trong dải bên ngoài. Khi bạn di chuột qua, tôi muốn hiển thị số chính xác và cả hai danh mục. Một cái gì đó như thế này: 'A: 5 điều từ B'.

EDIT:

Tôi vẫn không thể tìm hiểu cách triển khai mã trong mã của mình. Ai đó có thể điền vào mã ví dụ của tôi một giải thích những gì đang xảy ra?

<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"> 
    <title>Selecties EK 2010</title> 
    <script type="text/javascript" src="d3.v2.js"></script> 
    <link type="text/css" rel="stylesheet" href="ek2010.css"/> 
    </head> 
    <body> 
    <div id="chart"></div> 
    <script type="text/javascript" src="ek2010.js"></script> 
    </body> 
</html> 

// From http://mkweb.bcgsc.ca/circos/guide/tables/ 
var chord = d3.layout.chord() 
    .padding(.05) 
    .sortSubgroups(d3.descending) 
    .matrix([ 
     [0, 0, 7, 5], 
     [0, 0, 8, 3], 
     [7, 8, 0, 0], 
     [5, 3, 0, 0] 
    ]); 

var width = 1000, 
    height = 1000, 
    innerRadius = Math.min(width, height) * .3, 
    outerRadius = innerRadius * 1.1; 

var fill = d3.scale.ordinal() 
    .domain(d3.range(4)) 
    .range(["#000000", "#FFDD89", "#957244", "#F26223"]); 

var svg = d3.select("#chart") 
    .append("svg") 
    .attr("width", width) 
    .attr("height", height) 
    .append("g") 
    .attr("transform", "translate(" + width/2 + "," + height/2 + ")"); 

svg.append("g") 
    .selectAll("path") 
    .data(chord.groups) 
    .enter().append("path") 
    .style("fill", function(d) { return fill(d.index); }) 
    .style("stroke", function(d) { return fill(d.index); }) 
    .attr("d", d3.svg.arc().innerRadius(innerRadius).outerRadius(outerRadius)) 
    .on("mouseover", fade(.1)) 
    .on("mouseout", fade(1)); 

var ticks = svg.append("g") 
    .selectAll("g") 
    .data(chord.groups) 
    .enter().append("g") 
    .selectAll("g") 
    .data(groupTicks) 
    .enter().append("g") 
    .attr("transform", function(d) { 
     return "rotate(" + (d.angle * 180/Math.PI - 90) + ")" 
      + "translate(" + outerRadius + ",0)"; 
    }); 

ticks.append("line") 
    .attr("x1", 1) 
    .attr("y1", 0) 
    .attr("x2", 5) 
    .attr("y2", 0) 
    .style("stroke", "#000"); 

ticks.append("text") 
    .attr("x", 8) 
    .attr("dy", ".35em") 
    .attr("text-anchor", function(d) { 
     return d.angle > Math.PI ? "end" : null; 
    }) 
    .attr("transform", function(d) { 
     return d.angle > Math.PI ? "rotate(180)translate(-16)" : null; 
    }) 
    .text(function(d) { return d.label; }); 

svg.append("g") 
    .attr("class", "chord") 
    .selectAll("path") 
    .data(chord.chords) 
    .enter().append("path") 
    .style("fill", function(d) { return fill(d.target.index); }) 
    .attr("d", d3.svg.chord().radius(innerRadius)) 
    .style("opacity", 1); 

/** Returns an array of tick angles and labels, given a group. */ 
function groupTicks(d) { 
    var k = (d.endAngle - d.startAngle)/d.value; 
    return d3.range(0, d.value, 1).map(function(v, i) { 
    return { 
     angle: v * k + d.startAngle, 
     label: i % 5 ? null : v/1 + " internat." 
    }; 
    }); 
} 

/** Returns an event handler for fading a given chord group. */ 
function fade(opacity) { 
    return function(g, i) { 
    svg.selectAll("g.chord path") 
     .filter(function(d) { 
      return d.source.index != i && d.target.index != i; 
     }) 
     .transition() 
     .style("opacity", opacity); 
    }; 
} 

Trả lời

1

Bạn cần phải nhìn vào các xử lý sự kiện (selection.on()) trong wiki d3.js trên Github. Điều đó cho bạn thấy cách thêm sự kiện vào các yếu tố bao gồm di chuột qua và di chuột qua. Nếu bạn nhìn vào ví dụ mà bạn liên kết đến, bạn có thể thấy một thể hiện của nó đã:

svg.append("g") 
    .selectAll("path") 
    .data(chord.groups) 
.enter().append("path") 
    .style("fill", function(d) { return fill(d.index); }) 
    .style("stroke", function(d) { return fill(d.index); }) 
    .attr("d", d3.svg.arc().innerRadius(innerRadius).outerRadius(outerRadius)) 
    .on("mouseover", fade(.1)) 
    .on("mouseout", fade(1)); 

Nếu bạn di chuột qua các nhóm hợp âm trong vòng ngoài, bạn sẽ thấy tất cả các nhóm hợp âm khác mờ dần.

Nếu bạn muốn nhãn bật lên có chứa chuỗi (văn bản), bạn sẽ cần định nghĩa chúng bằng cách sử dụng thư viện JS khác. Tôi biết rằng công trình là Tipsy và có một ví dụ sử dụng nó cùng với d3 here. Sau đó, bạn có thể chỉ cần sử dụng công cụ chọn để chọn phần tử SVG nào bạn muốn minh họa hành vi này.

Hy vọng điều đó sẽ hữu ích.

+0

Dang. Mike đánh tôi với cú đấm và tất nhiên là có cách trả lời tốt hơn ... – tatlar