2012-05-03 58 views
20

Tôi đang tìm một ví dụ về cách vẽ một phân tán trong D3.js.Một ví dụ phân tán đơn giản trong D3.js?

Tôi không thể tìm thấy ví dụ đơn giản bằng cách xem qua official D3.js examples (ấn tượng mặc dù chúng là). Tôi chỉ muốn biết làm thế nào để:

  • hòa và gắn nhãn x- và y trục
  • điểm bốc thăm phân tán trên đồ thị.

Tôi đã tìm thấy this example trong số này D3 reusable library, nhưng phức tạp hơn nhiều so với nhu cầu của tôi, với các tệp bên ngoài khiến việc rút ra các điểm cần thiết trở nên khó khăn. Bất cứ ai có thể chỉ cho tôi một ví dụ scatterplot đơn giản để bắt đầu?

Cảm ơn rất nhiều.

+0

tôi không bao giờ sử dụng d3 trước đây và đã từ bỏ cố gắng để đặt cùng một ví dụ làm việc. Có vẻ như bạn cần phải chuyển đổi dữ liệu và trục để làm một cái gì đó thông thường (trục y mặc định chỉ xuống). Dưới đây là các trang tôi đã sử dụng: http://alignedleft.com/tutorials/d3/making-a-scatterplot/ và http://bl.ocks.org/1166403 Hy vọng họ sẽ giúp bạn! –

Trả lời

23

Điều này sẽ giúp bạn bắt đầu. Bạn có thể thấy nó hoạt động tại 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 

Được sử dụng như thế này:

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

Cảm ơn nhưng điều này không thực sự làm việc cho tôi - không chắc chắn nơi 'flipy' đến từ đâu? – Richard

+0

Xin lỗi về điều đó, tôi cho rằng ví dụ của anh ấy đang hoạt động. Tôi đã cập nhật câu trả lời của mình và đơn giản hóa mọi thứ một chút để hy vọng làm cho mọi thứ rõ ràng hơn. Bạn có thể thấy nó hoạt động tại http://bl.ocks.org/2595950. – Bill

+0

Ah, làm việc, bây giờ, cảm ơn bạn rất nhiều. – Richard

1

NVD3.js có ví dụ tuyệt vời. Bạn sẽ cần phải bao gồm thư viện của họ cũng hoặc xem xét việc triển khai của họ. Hãy xem ví dụ này của phân tán: http://nvd3.org/livecode/#codemirrorNav

Các vấn đề liên quan