2012-05-03 4 views
20

Je cherche un exemple de dessin d'un nuage de points dans D3.js.Un simple exemple de diagramme de dispersion dans D3.js?

Je n'ai pas été en mesure de trouver un exemple simple en regardant à travers le official D3.js examples (impressionnant mais ils sont). Je veux juste savoir comment:

  • dessiner et étiqueter les x et y axes
  • points de diffusion du tirage sur le graphique.

Je n'ai trouvé this example dans ce D3 reusable library, mais il est beaucoup plus complexe que j'ai besoin, avec des fichiers externes qui font du mal à tirer les points essentiels. Quelqu'un pourrait-il me pointer sur un simple exemple de nuage de points pour commencer?

Merci beaucoup.

+0

I jamais utilisé d3 avant et a abandonné en essayant de mettre en place un exemple de travail. Il semble que vous deviez transformer les données et les axes pour faire quelque chose de conventionnel (l'axe y par défaut pointe vers le bas). Voici les pages que j'ai utilisées: http://alignedleft.com/tutorials/d3/making-a-scatterplot/ et http://bl.ocks.org/1166403 J'espère qu'ils vous aideront! –

Répondre

23

Cela devrait vous aider à démarrer. Vous pouvez le voir en action au http://bl.ocks.org/2595950.

// data that you want to plot, I've used separate arrays for x and y values 
var xdata = [5, 10, 15, 20], 
    ydata = [3, 17, 4, 6]; 

// size and margins for the chart 
var margin = {top: 20, right: 15, bottom: 60, left: 60} 
    , width = 960 - margin.left - margin.right 
    , height = 500 - margin.top - margin.bottom; 

// x and y scales, I've used linear here but there are other options 
// the scales translate data values to pixel values for you 
var x = d3.scale.linear() 
      .domain([0, d3.max(xdata)]) // the range of the values to plot 
      .range([ 0, width ]);  // the pixel range of the x-axis 

var y = d3.scale.linear() 
      .domain([0, d3.max(ydata)]) 
      .range([ height, 0 ]); 

// the chart object, includes all margins 
var chart = d3.select('body') 
.append('svg:svg') 
.attr('width', width + margin.right + margin.left) 
.attr('height', height + margin.top + margin.bottom) 
.attr('class', 'chart') 

// the main object where the chart and axis will be drawn 
var main = chart.append('g') 
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')') 
.attr('width', width) 
.attr('height', height) 
.attr('class', 'main') 

// draw the x axis 
var xAxis = d3.svg.axis() 
.scale(x) 
.orient('bottom'); 

main.append('g') 
.attr('transform', 'translate(0,' + height + ')') 
.attr('class', 'main axis date') 
.call(xAxis); 

// draw the y axis 
var yAxis = d3.svg.axis() 
.scale(y) 
.orient('left'); 

main.append('g') 
.attr('transform', 'translate(0,0)') 
.attr('class', 'main axis date') 
.call(yAxis); 

// draw the graph object 
var g = main.append("svg:g"); 

g.selectAll("scatter-dots") 
    .data(ydata) // using the values in the ydata array 
    .enter().append("svg:circle") // create a new circle for each value 
     .attr("cy", function (d) { return y(d); }) // translate y value to a pixel 
     .attr("cx", function (d,i) { return x(xdata[i]); }) // translate x value 
     .attr("r", 10) // radius of circle 
     .style("opacity", 0.6); // opacity of circle 

Utilisé comme ceci:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>The d3 test</title> 
    <script type="text/javascript" src="http://mbostock.github.com/d3/d3.v2.js" charset="utf-8"></script> 
    </head> 
    <body> 
    <div class='content'> 
     <!-- /the chart goes here --> 
    </div> 
    <script type="text/javascript" src="scatterchart.js"></script> 
    </body> 
</html 
+0

Merci, mais cela ne fonctionne pas vraiment pour moi - je ne sais pas d'où vient «flipy»? – Richard

+0

Désolé à ce sujet, j'ai supposé que son exemple fonctionnait. J'ai mis à jour ma réponse et simplifié un peu les choses pour que les choses soient plus claires. Vous pouvez le voir travailler à http://bl.ocks.org/2595950. – Bill

+0

Ah, ça marche, maintenant, merci beaucoup. – Richard

Questions connexes