2012-05-01 8 views
6

Tôi đã làm theo hướng dẫn tại: http://bost.ocks.org/mike/path/ để tạo và tạo hoạt ảnh cho các biểu đồ đơn với các dòng đơn.d3.js - chuyển đổi & chuyển đổi, nhiều dòng

Và, đã tìm ra cách để tạo ra nhiều dòng trong một đồ thị: Drawing Multiple Lines in D3.js

Issue chính: Tôi gặp một thời gian khó khăn chuyển nhiều dòng sau khi tôi chuyển & đẩy trong dữ liệu mới vào mảng dữ liệu của tôi.

tôi tạo N dòng với: (thời gian: thời gian kỷ nguyên, bước về phía trước)

var seriesData = [[{time:1335972631000, value:23}, {time:1335972631500, value:42},...], 
        [{time:1335972631000, value:45}, {time:1335972631500, value:13},...], 
        [{time:1335972631000, value:33}, {time:1335972631500, value:23},...}], 
        [...],[...],... 
        ]; 

var seriesColors = ['red', 'green', 'blue',...]; 

line = d3.svg.line() 
     .interpolate(interpolation) 
     .x(function(d) { return x(d.time); }) 
     .y(function(d) { return y(d.value); }); 

graphGroup.selectAll(".line") 
     .data(seriesData) 
      .enter().append("path") 
      .attr("class", "line") 
      .attr("d", line) 
      .style('stroke', function(d, i) { return seriesColors[i]; }) 
      .style('stroke-width', 1) 
      .style('fill', 'none'); 

Và đang cố gắng để cập nhật N dòng với javascript setInterval (...) gọi một phương thức với:

graph.selectAll("path") 
    .data(seriesData) 
    .attr("transform", "translate(" + x(1) + ")") 
    .attr("d", line) 
     .transition() 
    .ease("linear") 
    .duration(transitionDelay) 
    .attr("transform", "translate(" + x(0) + ")"); 

Nó có thể vẽ thiết lập ban đầu một cách hoàn hảo, nhưng ngay sau khi tôi cập nhật ăn mảng dữ liệu, các dòng chỉ biến mất.


CẬP NHẬT 01

tôi nhận ra rằng tôi đang sử dụng giá trị thời gian thời điểm vào x (Xaxis cho thấy ngày: thời gian) làm ví dụ của tôi có lẽ sẽ làm việc nếu tôi sử dụng seriesData minh họa ở trên.

Vấn đề là "chuyển đổi", "dịch" bằng cách sử dụng x (1), x (0) đã trả về số lượng lớn, cách lớn hơn so với đồ thị của tôi cần được chuyển đổi.

Tôi đổi cập nhậtN phương pháp dòng (ở trên) để sử dụng một phương pháp thủ công:

Issue mới: Bây giờ di chuyển đồ thị để lại một cách chính xác, nhưng theo dòng/graph pops quay lại bên phải, mỗi cập nhật setInterval thực hiện.

Đó là đẩy/thay đổi chuỗi chuỗiData chính xác nhưng không tiếp tục cuộn sang trái để hiển thị dữ liệu mới thực sự đang được vẽ.

graph.selectAll("path") 
     .data(seriesData) 
     .attr("d", line) 
     .attr("transform", null) 
      .transition() 
     .ease("linear") 
     .duration(2000) 
     .attr("transform", "translate(-200)"); 

Một tài liệu tham khảo mà tôi đã sử dụng là: http://bl.ocks.org/1148374

Bất kỳ suy nghĩ?

+0

Tôi bắt đầu nghĩ rằng điều này liên quan đến việc tôi sử dụng d3.time.scale() ... cho x so với d3.scale.linear() ...? – August

+0

Bạn đã bao giờ giải quyết vấn đề này chưa? Nếu vậy xin vui lòng gửi giải pháp của bạn. –

+0

Tôi đã tạo ra ba biểu đồ riêng biệt với một dòng duy nhất. Sau đó, tôi sử dụng CSS để xếp chồng ID của biểu đồ lên trên nhau. Việc quản lý và sử dụng lại dễ dàng hơn. Đặc biệt nếu tôi muốn nó được mịn màng .. – August

Trả lời

1

Một điều mà nhảy ra lúc tôi như một khả năng cho lỗi là các cuộc gọi dữ liệu được sử dụng, ban đầu là

.data(seriesData) 

cập nhật sử dụng

.data([seriesData]) 

mà có thể gây ra vấn đề này, nhưng khó mà nói mà không thấy phần còn lại của những gì đang diễn ra, bạn có thể đặt nó trên jsfiddle không?

+0

Quan sát tuyệt vời, nhưng nó không khắc phục vấn đề cập nhật. – August

+0

[dữ liệu] đến từ ví dụ này: http://bl.ocks.org/1148374 – August

+1

Vì vậy, tôi đoán điều này có nghĩa là khi thay đổi cuộc gọi dữ liệu thứ hai để khớp với lệnh đầu tiên, không có gì thay đổi? - chắc chắn có những trường hợp bạn muốn chuyển tất cả dữ liệu của mình dưới dạng mảng phần tử đơn, nhưng điều này dường như không phải là một trong số đó, từ những gì tôi có thể nói. Tôi e rằng tôi không thể giúp gì nhiều hơn nếu không nhìn thấy nhiều mã hơn. – Josh