Điều này có thể làm sáng tỏ các khía cạnh lồng nhau, ngoài của mbostock câu trả lời tốt.
Dữ liệu của bạn có 2 độ lồng. Bạn có một mảng gồm 2 đối tượng, mỗi đối tượng có một mảng int. Nếu bạn muốn hình ảnh cuối cùng của bạn phản ánh những khác biệt này, bạn cần phải tham gia cho mỗi sự khác biệt.
Đây là một giải pháp: Mỗi người dùng được thể hiện bằng một phần tử nhóm g
, với mỗi điểm được đại diện bởi rect
. Bạn có thể thực hiện việc này theo một vài cách: Hoặc sử dụng datum
trên svg, sau đó là chức năng nhận dạng trên mỗi g
hoặc bạn có thể trực tiếp tham gia dữ liệu trên g
.Sử dụng data
trên g
là điển hình hơn, nhưng đây là cả hai cách:
Sử dụng dữ kiện trên svg:
var chart = d3.select('body').append('svg')
.datum(data) // <---- datum
.attr('width',800)
.attr('height',350)
.selectAll('g')
.data(function(d){ return d; }) // <----- identity function
.enter().append('g')
.attr('class', function(d) { return d.user; })
.attr('transform', function(d, i) { return 'translate(0, ' + i * 140 + ')'; })
.selectAll('rect')
.data(function(d) { return d.scores; })
.enter().append('rect')
.attr('y', function(d, i) { return i * 20; })
.attr('width', function(d) { return d; })
.attr('height', 20);
sử dụng dữ liệu về nhóm (g
) yếu tố:
var chart = d3.select('body').append('svg')
.attr('width',800)
.attr('height',350)
.selectAll('g')
.data(data) // <--- attach directly to the g
.enter().append('g')
.attr('class', function(d) { return d.user; })
.attr('transform', function(d, i) { return 'translate(0, ' + i * 140 + ')'; })
.selectAll('rect')
.data(function(d) { return d.scores; })
.enter().append('rect')
.attr('y', function(d, i) { return i * 20; })
.attr('width', function(d) { return d; })
.attr('height', 20);
Một lần nữa, bạn không phải tạo các phần tử g này, nhưng bằng cách làm như vậy bây giờ tôi có thể đại diện cho điểm số của người dùng khác nhau (họ có differe nt y từ biến đổi) và tôi cũng có thể cung cấp cho họ các kiểu khác nhau, như sau:
.jim {
fill: red;
}
.ray {
fill: blue;
}
Xin chào Mike, tôi rất vinh dự khi nhận được sự giúp đỡ từ bạn :) Điều tôi muốn trong ví dụ này là lấy một SVG hình ảnh. Dường như lỗi của tôi đã không được sử dụng .data ([dữ liệu]), chỉ cần .data (dữ liệu) thay thế. Thật không may tôi không thể kiểm tra nó cùng một lúc, nhưng tôi sẽ làm điều đó vào tối nay. Tôi đã lướt qua "các lựa chọn lồng nhau" trước đây. Điều đó dường như không bao gồm chủ đề này, nhưng kể từ khi bạn đề xuất nó, tôi sẽ đi sâu vào các hướng dẫn này. Tôi sẽ cập nhật bài đăng này. Cảm ơn! – Ray
Vui vì tôi có thể giúp. Nếu điều này trả lời câu hỏi của bạn, vui lòng thêm dấu kiểm để giải quyết. Cảm ơn! – mbostock
Xin chào một lần nữa, giải pháp đó không hoạt động. Lần này không có hình ảnh nào trong thời gian này: \ – Ray