D3.js를 사용하여 실시간 그래프를 만들려고합니다. 코드는 https://plnkr.co/edit/hrawv8CTBIsJf2QWTBMb?p=preview에 있습니다.D3가 잘못된 데이터를 선택하여 종료합니다.
원본 데이터는 여러 조직의 사용자 인증 결과를 나타냅니다. 각 조직에는 이름, 확인 횟수 및 실패 횟수가 있습니다. 그래프는 데이터에 따라 동적으로 업데이트되어야합니다 (루프 내 데이터 가져 오기).
코드는 https://bl.ocks.org/mbostock/3808234을 기반으로합니다.
나는 거의 확실하지 않은 몇 가지 문제가 있습니다.
// JOIN new data with old elements
// specify function for data matching - correct?
var boxes = svg.selectAll(".box").data(data, function(d) {
return d.inst_name;
});
// EXIT old elements not present in new data
// this works somehow strange
// it does select all red boxes
boxes.exit().transition(t).remove();
왜()는 빨간색 막대가 아닌 모든 출구를 선택 않습니다
종료 기능은 데이터 업데이트에 따라 빨간색 막대를 선택? 이해하는 데있어 d3 문서 exit()는 새로운 데이터가없는 요소 만 선택해야합니다. 무한 루프 및 상수 데이터 파일의 경우 모든 막대를 사용해야합니까?
이것은 명백히 그래프를 상당히 파괴합니다 (plunker 참조). 더 이상 데이터 파일에서 사용할 수없는 바 만 선택하려면 나가야합니다. 아래 예를 참조하십시오.
데이터 파일초기 상태 :
inst_name,ok,fail
inst1,24,-1
inst2,23,-3
...
업데이트 데이터 파일의 상태 : intial 상태로부터 INST2 대 (청색 및 적색 모두) 바가 제거 (의해 대체되어야
inst_name,ok,fail
inst1,26,-1
inst14,22,-4
...
inst14의 데이터)를 갱신한다. 왜 이것이 작동하지 않습니까?
새로운 데이터가 이전 색인을 사용하여 읽었습니다. 나는 inst_name 사용하는 것을 지정한 :
var boxes = svg.selectAll(".box").data(data, function(d) {
return d.inst_name;
});
가 필요하다고 (I 데이터를 삽입 할 때 어디에서나 사용했습니다)인가?
또한 요소를 제거하기위한 전환이 작동하지 않습니다. 문제가 무엇입니까?
나는 새로운 막대를 추가 할 때 데이터를 지정하는 것이 필요한 경우되지 확신 : 도움을
var boxes = svg.selectAll(".box").data(data, function(d) {
return d.inst_name;
});
.....
// add new element in new data
svg.selectAll(".blue")
.data(data, function(d) { // is this necessary ?
return d.inst_name;
}) // use function for new data matching against inst_name, necessary?
.enter().append("rect")
.transition(t)
.attr("class", function(d) {
return "blue box "
})
.attr("x", function(d) {
return x(d.inst_name);
})
.attr("width", x.bandwidth())
.attr("y", function(d) {
return y(d.ok);
})
.attr("height", function(d) {
return height - y(d.ok + min);
})
감사합니다. 이 독립적 그래프 상태 변경할 수 있도록 기본 데이터는 (이 원래 게시물 명확히 기록되지 않은) 스크립트 바뀌지
EDIT. 데이터는 증가해야합니다.
올바르게 업데이트 됨 [plunker] (https://plnkr.co/edit/mywlQ2rjf2CSCjap3O92?p=preview). 실패 데이터를 긍정적으로 변경했습니다. 여전히 라인 144와 145가 .red에서 작동하지 않고 라인 150과 151이 사용되어야하는 이유는 확실하지 않습니다. 또한 [this] (https://stackoverflow.com/questions/18831949/d3js-make-new-parent-data-descend-into-child-nodes) 도움을 받았다. – lager