2012-05-11 10 views
12

में लेबल जोड़ें मैं एक रूकी प्रोग्रामर हूं, इसलिए यह शायद आप में से अधिकांश के लिए एक आसान होगा। इस तार आरेख के लिए लेबल और/या माउस-ओवर टेक्स्ट के लिए मुझे किस कोड की आवश्यकता है?डी 3 चोर आरेख

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

enter image description here

मैं बाहरी पट्टी में श्रेणी का नाम प्रदर्शित करने के लिए इसकी आवश्यकता है। जब आप माउस पर जाते हैं, तो मैं सटीक संख्या और दोनों श्रेणियों को प्रदर्शित करना चाहता हूं। कुछ ऐसा: 'ए: बी से 5 चीज'।

संपादित करें:

मैं अभी भी समझ नहीं कैसे मेरे कोड में लागू करने के लिए। क्या कोई मेरा उदाहरण कोड भर सकता है कि क्या हो रहा है?

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

उत्तर

14

लेबल प्रदर्शित करने के लिए text elements जोड़ें। वैकल्पिक रूप से, यदि आप पथ के साथ पाठ प्रदर्शित करना चाहते हैं तो textPath elements का उपयोग करें। लेबल तार चित्र के दो उदाहरण:

+0

ग्रेट, यह चाल चलाना चाहिए। –

1

आप Github पर d3.js विकि में (selection.on()) ईवेंट हैंडलर को देखने की जरूरत है। इससे आपको माउसओवर और माउसआउट सहित तत्वों में ईवेंट जोड़ने का तरीका दिखाता है।

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

आप तार समूहों बाहरी रिंग में आप अन्य सभी तार समूहों बाहर फीका देखेंगे पर माउस को हॉवर हैं: आपको लगता है कि उदाहरण आप से जुड़ा हुआ को देखें, तो आप पहले से ही यह का एक उदाहरण देख सकते हैं।

यदि आप लेबल को पॉप-अप करना चाहते हैं जिसमें तार (टेक्स्ट) है तो आपको उन्हें अन्य जेएस लाइब्रेरी का उपयोग करके परिभाषित करने की आवश्यकता होगी। एक मुझे पता है कि काम Tipsy है और डी 3 here के साथ इसका उपयोग करने का एक उदाहरण है। इसके बाद आपको यह चुनने के लिए चयनकर्ता का उपयोग करना चाहिए कि आप कौन सा एसवीजी तत्व इस व्यवहार को स्पष्ट करना चाहते हैं।

उम्मीद है कि मदद करता है।

+0

डांग। माइक ने मुझे पंच पर मार दिया और निश्चित रूप से एक बेहतर जवाब था ... – tatlar