Hy vọng ai đó có thể giúp đỡ ở đây.
Tôi có một số biểu đồ sử dụng setinterval để làm mới trong 500 mili giây. Khi làm mới, nó sẽ tải dữ liệu từ tệp JSON được tạo bởi tập lệnh Python. Tôi muốn có thể RAG (đỏ, hổ phách, xanh lục) dữ liệu trong biểu đồ dựa trên các giá trị này.
Ví dụ: Nếu số nhỏ hơn 10 thì tô màu xanh lá cây. Nếu từ 10 đến 20 thì màu hổ phách, trên 20 thì màu đỏ.
Tôi sẽ lấy biểu đồ đạn của Mike làm ví dụ:https://bl.ocks.org/mbostock/4061961
Trong CSS của tôi, tôi đã thêm các màu - s0 và s1 có trong ví dụ của anh ấy:
.bullet .measure.s0 { điền: lightsteelblue }
.bullet .measure.s1 { điền: thép xanh }
.bullet .measure.s2 { điền: rgb(242, 242, 242 }
.bullet .measure.s3 { điền: #DF4A5E }
.bullet .measure.s4 { điền: rgb(242, 242, 242 }
.bullet .measure.s5 { điền: #FBAB4A }
.bullet .measure.s6 { điền: rgb(242, 242, 242 }
.bullet .measure.s7 { điền: #24C678 }
Sau đó, trong Bullet.js tôi có thể gọi một hàm dựa trên giá trị dữ liệu, hàm này sẽ chọn lớp CSS chính xác (dòng 5-13 ở đây):
var số đo = g.selectAll("orth.measure")
.data(đo);
Measure.enter().append("orth")
.attr("class", hàm (d, i) {
nếu (d > 20) {
return "số đo s" + (i + 2);
} khác nếu (d > 10) {
return “số đo s” + (i + 4);
} khác {
return “số đo s” + (i + 6);
}
})
.attr("chiều rộng", w0)
.attr("chiều cao", chiều cao / 2)
.attr("x", đảo ngược ? x0 : 0)
.attr("y", chiều cao / 4)
.transition()
.duration(thời lượng)
.attr("chiều rộng", w1)
.attr("x", đảo ngược ? x1 : 0);
thước đo.transition()
.duration(thời lượng)
.attr("chiều rộng", w1)
.attr("chiều cao", chiều cao / 2)
.attr("x", đảo ngược ? x1 : 0)
.attr("y", chiều cao / 4);
Điều này hoạt động rất tốt, khi tôi làm mới trang, màu sắc sẽ thay đổi chính xác dựa trên giá trị trong JSON, nhưng với lần làm mới theo khoảng thời gian của tôi, nó không cập nhật.
Làm mới của tôi là như sau:
setInterval(hàm () {
cập nhậtData();
}, 500);
hàm cập nhậtData() {
d3.json("mailboxes.json", hàm (lỗi, dữ liệu) {
d3.select("cơ thể")
.selectAll("svg")
.select('g')
.data(dữ liệu)
.call(chart.duration(500));
});
};
Điều này làm mới dữ liệu nhưng rõ ràng là không vẽ lại hình chữ nhật.
Tôi đã thử thêm bộ chọn vào thước đo rồi thay đổi lớp nhưng không được. (Tôi cũng đã thử SelectAll("svg") rồi chọn('orth.measure') và bất kỳ sự kết hợp nào tôi có thể nghĩ ra.
hàm cập nhậtData() {
d3.json("mailboxes.json", hàm (lỗi, dữ liệu) {
d3.select("cơ thể")
.selectAll("svg")
.select('g')
.data(dữ liệu)
.call(chart.duration(500));
d3.select("cơ thể")
.selectAll("orth.measure")
.data(dữ liệu)
.attr("class", hàm (d, i) {
nếu (d > 20) {
return "số đo s" + (i + 2);
} khác nếu (d > 10) {
return “số đo s” + (i + 4);
} khác {
return “số đo s” + (i + 6);
}
});
};
Dưới đây là ví dụ về trang được tải khi giá trị của JSON hỗ trợ dưới 10, do đó có màu xanh lục. Giá trị đã tăng lên trên 10 và bây giờ sẽ có màu hổ phách.
Dấu đầu dòng màu xanh trước khi làm mới trang
Khi tôi làm mới trang, nó hoạt động như mong đợi
Dấu đầu dòng màu hổ phách sau khi làm mới trang
Tôi có thể chỉ cần chức năng vẽ lại khi làm mới như bên dưới nhưng tôi đã thử một vài thứ và không có gì hiệu quả
vẽ lại()
vẽ lại hàm(
biện pháp.blah
)
Bạn phải thay đổi vị trí của lớp cập nhật.
hiện hữu chuyển đổi()
được thực hiện trước đó, nếu không chuỗi lớp sẽ được nội suy và một màu đen thẳng
Measure.enter().append("orth")
.attr("chiều rộng", w0)
.attr("chiều cao", chiều cao / 2)
.attr("x", đảo ngược ? x0 : 0)
.attr("y", chiều cao / 4)
.transition()
.duration(thời lượng)
.attr("chiều rộng", w1)
.attr("x", đảo ngược ? x1 : 0);
đo lường
.attr("class", hàm (d, i) {
if (d > 20) { return "độ đo s" + (i + 2 }
if (d > 10) { return "độ đo s" + (i + 4 }
return “số đo s” + (i + 6);
})
.transition()
.duration(thời lượng)
.attr("chiều rộng", w1)
.attr("chiều cao", chiều cao / 2)
.attr("x", đảo ngược ? x1 : 0)
.attr("y", chiều cao / 4);
Tôi là một lập trình viên xuất sắc, rất giỏi!