2013-07-12 30 views
9

Tôi đang sử dụng thư viện NVD3 để tạo biểu đồ đường đơn giản dựa trên dữ liệu được tạo trong bộ điều khiển Rails. Mã Tôi đang sử dụng để tạo ra dữ liệu trong Rails là:Biểu đồ đường dây NVD3 Loại không bắt buộcLỗi: Không thể đọc thuộc tính 'x' không xác định

task.task_values.each do |u| 
array.push({ :x => u.created_at.to_i * 1000, :y => u.value.to_i }) 
end 
data_label = task.name + " ("+ task_unit +")" 
taskValuesList = [{:key => data_label, :values => array}] 
data = {:type => "line", :data => taskValuesList} 

Sau đó, theo quan điểm của tôi, tôi có mã JS sau:

nv.addGraph(function() { 
var chart = nv.models.lineChart() 
    .x(function(d) { return d.x; }) 
     .y(function(d) { return d.y; }); 

chart.xAxis 
    .showMaxMin(false) 
     .tickFormat(function(d){return d3.time.format("%m/%d/%y")(new Date(d));}); 
chart.yAxis 
    .tickFormat(d3.format(',d')); 

d3.select('#chart<%= i %> svg') 
    .datum(data.data) 
    .transition().duration(500) 
    .call(chart); 

nv.utils.windowResize(chart.update); 
    return chart; 
}); 

Biểu đồ làm cho đúng, nhưng khi tôi cố gắng điểm dữ liệu di chuột để hiển thị tooltip, tôi nhận được lỗi "của router lỗi Loại: không thể đọc thuộc 'x' không xác định"

+0

Bạn có thể cập nhật câu hỏi của mình với dữ liệu được chuyển đến biểu đồ hay không. – shabeer90

+0

Dưới đây là một số dữ liệu mẫu: [{: key => " Huyết áp tâm trương (mmHg) ",: giá trị => [{: x => 1373403179000,: y => 91}, {: x => 1373403469000,: y => 95}, {: x => 1373403567000,: y => 61}, {: x => 1373404123000,: y => 56}, {: x => 1373404515000,: y => 56}, {: x => 1373404592000,: y => 56}, {: x => 1373404749000,: y => 56}, {: x => 1373405085000,: y => 56}]}] – rushilg

+0

Tôi không có ý tưởng về ruby-on-rails nhưng dữ liệu có thông qua đối tượng JSON không? – shabeer90

Trả lời

-2

Hãy chắc chắn rằng dữ liệu của bạn ở định dạng JSON,

Sau đây là cách JSON dữ liệu mẫu nên trông giống như

data = [{ 
    key : "Line 1", 
    color : "#51A351", 
    values : [{ 
     x : 1373403179000, 
     y : 40 
    }, { 
     x : 1373403469000, 
     y : 30 
    }, { 
     x : 1373403567000, 
     y : 20 
    }] 
}, { 
    key : "Line 2", 
    color : "#BD362F", 
    values : [{ 
     x : 1373403179000, 
     y : 60 
    }, { 
     x : 1373403469000, 
     y : 50 
    }, { 
     x : 1373403567000, 
     y : 70 
    }] 
}] 

UPDATE : Đây là một fiddle làm việc của một NVD3 Line chart

+0

Có, tôi chuyển dữ liệu dưới dạng đối tượng JSON. Một ví dụ về các tham số được nhận bởi mã JS là: {"type": "line", "data": [{"key": "Blood Pressure Diastolic (mmHg)", "values": [{"x" : 1373403179000, "y": 91}, {"x": 1373403469000, "y": 95}, {"x": 1373403567000, "y": 61}, {"x": 1373404123000, "y": 56 }, {"x": 1373404515000, "y": 56}, {"x": 1373404592000, "y": 56}, {"x": 1373404749000, "y": 56}, {"x": 1373405085000 , "y": 56}]}]} – rushilg

+0

Ngoài ra, cốt truyện có vẻ tốt nhưng lỗi xuất hiện khi tôi di chuột qua chú giải công cụ – rushilg

+0

Như tôi đã đề cập, dữ liệu ở định dạng JSON nhưng tôi vẫn gặp lỗi - sẽ đánh giá cao bất kỳ ý tưởng nào! – rushilg

2

Nếu bạn đang nhìn thấy một Uncaught TypeError: Cannot read property 'x' of undefined nó là có thể bởi vì hàng loạt dữ liệu của bạn có chứa các số khác nhau của các điểm.

Kiểm tra xem điều này có xảy ra chỉ với một chuỗi không.

+0

Cảm ơn - Tôi thấy điều này. – Cymen

+0

Tôi chỉ gặp vấn đề này đối với trục Y của tôi ... nhìn vào đảm bảo rằng mọi thứ phù hợp để tránh lỗi này –

+0

Đây là nguyên nhân. Tất cả các nhóm thanh phải có cùng số phần tử. – PeterVermont

25

Tôi đã gặp lỗi tương tự và bị kẹt trong nhiều giờ. Sau một cuộc điều tra tôi phát hiện ra rằng tôi đang sử dụng phiên bản mới nhất của d3.js đó là không tương thích với phiên bản mới nhất của nvd3.js

Hãy chắc chắn rằng bạn đang sử dụng phiên bản d3.js được bao gồm trong kho lưu trữ nvd3: /lib/d3.v3.js

Điều đó khá phức tạp để tìm hiểu. Cụ thể là vì nvd3 documentation yêu cầu bạn sử dụng phiên bản d3.js mới nhất ;-(

+4

Một chi tiết, điều này có thể được repro trên một biểu đồ đường có chứa hai dòng chia sẻ một điểm chung (x, y). – mcabral

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