2012-05-11 28 views
12

Jestem początkującym programistą, więc ten będzie prawdopodobnie łatwy dla większości z was. Jakich linii kodu potrzebuję dla etykiet i/lub tekstu umieszczonego na myszy dla tego diagramu Chord?Dodaj etykiety do diagramu D3 Chord

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

enter image description here

muszę go, aby wyświetlić nazwę kategorii w zewnętrznym pasie. Po kliknięciu myszką chcę wyświetlić dokładną liczbę i obie kategorie. Coś takiego: "A: 5 rzeczy z B".

EDIT:

Wciąż nie mogę dowiedzieć się, jak zaimplementować to w moim kodu. Czy ktoś może podać mój przykładowy kod i wyjaśnić, co się dzieje?

<!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> 

i

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

Odpowiedz

1

Trzeba spojrzeć na obsługi zdarzeń (selection.on()) w wiki d3.js na Github. To pokazuje, jak dodawać zdarzenia do elementów, w tym mouseover i mouseout. Jeśli spojrzeć na ten przykład ty związane, można zobaczyć wystąpienie już:

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

Po najechaniu myszką na grupy akordów w pierścieniu zewnętrznym będzie można zobaczyć wszystkie inne grupy akordów zanikają.

Jeśli chcesz, aby etykiety zawierające wyskakujące okienka zawierały ciągi (tekst), musisz je zdefiniować przy użyciu innej biblioteki JS. Jeden z nich, który działa, to Tipsy i istnieje przykład użycia go razem z d3 here. Powinieneś wtedy móc po prostu użyć selektora, aby wybrać element SVG, który chcesz zilustrować to zachowanie.

Nadzieję, że pomaga.

+0

Dang. Mike pokonał mnie na pięcie i oczywiście miał o wiele lepszą odpowiedź ... – tatlar

Powiązane problemy