내 데이터는 숫자 배열입니다.변경된 데이터 선택 받기
숫자가 스왑되어 배열이 무작위로 지정됩니다.
각 숫자는 막대 차트에 막대로 표시됩니다.
각 단계에서 색상과 불투명도 (깜박임 효과)를 변경하는 간단한 전환을 실행하여 스왑 된 두 요소를 강조하고 싶습니다. 지금 현재로서는
, I 데이터 셋 복사 교환 전에, I는 체크 업데이트 선택 애니메이션 때, 상기 번호는 동일한 위치에 이전 데이터 집합의 값과 그 값을 비교하여 이동했는지 : 만약 내가 다른 색상과 불투명도를 변경합니다.
bars.transition()
.attr("fill", function(d, i) { return d !== previous[i] ? "green" : "blue"; })
.attr("opacity", function(d, i) { return d !== previous[i] ? 0.5 : 1; })
.transition()
.attr("x", getX)
.transition()
.attr("fill", "blue")
.attr("opacity", 1);
은 "문제는"기존의 모든 바,뿐만 아니라 업데이트 된 사람을 "영향"한다는 것이다 : 여기
는 코드입니다. 이 나는이 좋지 않은 것 같다 (같은 위치에 다른 바 "움직임"과 채우기가 같은 색으로 "변화"입니다) 표시되지 않지만:
나는이 문제가 (100 개의 막대가 ID 작업의 98 %를 사용하여) 많은 쓸모없는 처리가 있기 때문에 성능 관점에서 볼 때 매우 유용합니다.
또한 변경된 데이터의 특수한 실행 경로는 "아무것도하지 않는"경로로 (조건문을 통해) 인터리브되어 명확하게 이해 및 유지 관리에 적합하지 않습니다.
_
합니까 D3는 "변경된 데이터"의 이러한 개념을 가지고?
D3 방식으로 동일한 작업을 수행 할 수 있습니까?
_ 사전에
감사합니다.
답장을 보내 주셔서 감사합니다. 데이터는 이미 해당 값으로 식별됩니다. 필터 함수는 원래 인덱스를 유지하지 않으므로 작동하지 않습니다. 그러나 select 함수는 비슷한 기능을합니다 :'bars.select (function (d, i) {return d! == previous [i]? this : null;})'감사합니다. 24 시간 내에 다른 입력이 없으면 답을 수락합니다. :) – Pragmateek
아, 당신이 색인을 보존해야한다고 나에게 분명하지 않았습니다. 하지만 그렇습니다.이 경우 하위 선택이 필요합니다. 나는 필터를 사용하는 경향이 있는데 왜냐하면 그것이 나를 위해 더 직관적이기 때문이다. –
좋은 이유에 대해 당신에게 명확하지 않았습니다 : 당신은 알 수 없습니다. 그것은 getX에 숨겨져 있습니다. :) 나는 두 개의 다른 "목적"을 위해'select'와 같은 함수를 사용하는 것이 편해서'filter'도 선호합니다. 'filter '의 의미는 명확하다. – Pragmateek