HAHS.
Back to Catalog

Animated Transition

interaction

Also known as: transition, tween, morphing, interpolation, object constancy

Show change over timeGuide narrativeEnable exploration NumericalTemporalCategorical

설명 / Description

애니메이션 전환은 시각화의 두 상태 사이에서 시각적 속성(위치, 크기, 색상, 불투명도, 형태)을 부드럽게 보간합니다. 한 뷰에서 다른 뷰로 갑자기 전환되는 대신, 마크는 짧은 시간(보통 300~800ms) 동안 점진적으로 움직이고, 커지거나 작아지고, 색을 바꾸어 시청자가 개별 요소를 추적하고 데이터가 한 구성에서 다음 구성으로 어떻게 매핑되는지 이해할 수 있게 합니다.

Animated transitions smoothly interpolate visual properties (position, size, color, opacity, shape) between two states of a visualization. Rather than abruptly jumping from one view to another, the marks gradually move, grow, shrink, or recolor over a short duration (typically 300-800ms), allowing the viewer to track individual elements and understand how the data maps from one configuration to the next.

시각화에서 애니메이션 전환의 이론적 토대는 히어와 로버트슨(Heer & Robertson, 2007)이 통계 데이터 그래픽의 애니메이션 전환을 연구하며 확립했습니다. 이들은 잘 설계된 애니메이션이 시청자가 "객체 항상성(object constancy)" — 새 뷰의 특정 막대, 점, 선분이 이전 뷰의 것과 동일한 개체라는 지각적 감각 — 을 유지하도록 돕는다는 것을 보였습니다. 애니메이션이 없으면 막대 차트의 정렬 작업은 완전히 새로운 배열을 만들어내어 시청자가 처음부터 다시 해석해야 하지만, 애니메이션이 있으면 시청자는 각 막대가 새 위치로 미끄러지는 것을 추적하며 재정렬을 즉시 파악할 수 있습니다.

The theoretical foundation for animated transitions in visualization was established by Heer and Robertson (2007) in their study of animated transitions in statistical data graphics. They demonstrated that well-designed animations help viewers maintain "object constancy" — the perceptual sense that a specific bar, point, or line segment in the new view is the same entity as one in the old view. Without animation, a sort operation on a bar chart produces a completely new arrangement that the viewer must re-parse from scratch; with animation, the viewer can track each bar sliding to its new position and immediately grasp the reordering.

효과적인 애니메이션 전환의 핵심은 단계화입니다: 여러 속성이 동시에 바뀌는 복잡한 변화는 동시 보간이 아니라 순차적 단계로 분해해야 합니다. 히어와 로버트슨은 단계화된 전환(예: 먼저 막대를 수평으로 이동시킨 다음 수직으로 크기를 조정)이 동시 전환보다 훨씬 따라가기 쉽다는 것을 발견했습니다. 지속 시간도 중요합니다 — 200ms 미만의 전환은 즉각적으로 느껴지고, 1000ms를 넘으면 느리게 느껴집니다. 대부분의 시각화 전환에서 최적 구간은 300~600ms입니다.

The key to effective animated transitions is staging: complex multi-property changes should be decomposed into sequential stages rather than simultaneous interpolation. Heer and Robertson found that staged transitions (e.g., first move bars horizontally, then resize them vertically) were significantly easier to follow than simultaneous transitions. Duration matters too — transitions under 200ms feel instantaneous, over 1000ms feel sluggish. The sweet spot is 300-600ms for most visualization transitions.

Animated Transition — try it yourself

언제 사용하나 / When to Use

  • 시각화 상태가 변할 때(정렬, 필터링, 드릴다운, 데이터셋 변경) 시청자가 상태 간 어떤 마크가 대응하는지 추적해야 하는 경우.
  • When the visualization changes state (sort, filter, drill-down, change dataset) and the viewer needs to track which marks correspond between states.
  • 요소를 재정렬할 때(막대 정렬, 노드 재배치) 애니메이션이 없으면 시청자가 개별 항목을 놓칠 수 있는 경우.
  • When reordering elements (sorting bars, rearranging nodes) and the viewer would lose track of individual items without animation.
  • 각 단계가 이전 단계 위에 쌓이고 연속성이 필수적인 내러티브/스크롤리텔링 시각화에서.
  • In narrative/scrollytelling visualizations where each step builds on the previous one and continuity is essential.
  • 차트 유형 간 전환 시(막대 차트에서 파이 차트로, 산점도에서 연결된 점 도표로) 시청자가 마크가 표현 간에 어떻게 매핑되는지 볼 필요가 있는 경우.
  • When transitioning between chart types (bar chart to pie chart, scatterplot to connected dot plot) and the viewer needs to see how marks map between representations.
  • 데이터가 실시간으로 갱신될 때(라이브 대시보드, 스트리밍 데이터) 부드러운 업데이트가 시각적으로 거슬리는 점프를 방지하는 경우.
  • When data updates in real-time (live dashboards, streaming data) and smooth updates prevent jarring visual jumps.

이럴 땐 피하세요 / When NOT to Use

  • 상태 변화가 사소하여 애니메이션이 오히려 사용자를 느리게 만드는 경우(예: 단일 레이블을 켜고 끄는 토글).
  • When the state change is trivial and animation would slow the user down (e.g., toggling a single label on/off).
  • 초당 여러 번 업데이트되는 고빈도 갱신 시나리오에서 애니메이션이 연속적이고 해석 불가능한 흐림을 만드는 경우.
  • In high-frequency update scenarios (multiple updates per second) where animation would create a continuous, unresolvable blur.
  • 이전 상태와 새 상태 사이에 의미 있는 대응 관계가 없는 경우(새 뷰의 마크가 이전 마크와 관련이 없음).
  • When there is no meaningful correspondence between the old and new states (the marks in the new view have no relation to the old ones).
  • 사용자가 빠른 탐색적 인터랙션을 수행할 때(슬라이더를 빠르게 스크러빙) 애니메이션이 입력을 따라가지 못하고 지연되는 경우.
  • When the user is performing rapid exploratory interactions (scrubbing a slider quickly) and animation would lag behind input.
  • 운영체제에서 prefers-reduced-motion을 설정한 사용자를 위해 — 이 접근성 설정은 항상 존중해야 합니다.
  • For users who have set prefers-reduced-motion in their operating system — always respect this accessibility preference.

작동 방식 / How It Works

  1. 상태 변화가 트리거됩니다 — 사용자가 차트를 정렬하거나, 데이터를 필터링하거나, 드릴다운하거나, 시스템이 새로운 내러티브 단계로 진행합니다.
    A state change is triggered — the user sorts the chart, filters data, drills down, or the system advances to a new narrative step.
  2. 시스템이 각 마크의 이전 및 새로운 시각적 속성을 계산합니다 (위치, 크기, 색상, 불투명도). 마크는 키 함수(예: 데이터 ID)를 사용해 상태 간에 매칭됩니다.
    The system computes the old and new visual properties for each mark (position, size, color, opacity). Marks are matched between states using a key function (e.g., data ID).
  3. 진입하는 마크의 경우 (새 데이터 포인트), 애니메이션이 0에서부터 이를 페이드인하거나 확대합니다.
    For entering marks (new data points), the animation fades or grows them in from zero.
  4. 갱신되는 마크의 경우 (기존 데이터 포인트), 애니메이션이 전환 지속 시간에 걸쳐 각 속성을 이전 값에서 새 값으로 보간합니다.
    For updating marks (existing data points), the animation interpolates each property from old to new values over the transition duration.
  5. 퇴장하는 마크의 경우 (제거된 데이터 포인트), 애니메이션이 이를 페이드아웃하거나 축소합니다.
    For exiting marks (removed data points), the animation fades or shrinks them out.
  6. 전환은 이징 함수를 사용합니다 (기본값은 ease-in-out) — 가속을 제어하여 움직임을 자연스럽게 만듭니다.
    The transition uses an easing function (ease-in-out is the default) to control acceleration, making the motion feel natural.
  7. 전환이 완료되고, 시각화는 새로운 상태가 됩니다.
    The transition completes, and the visualization is in its new state.

변형 / Variations

  • 진입/갱신/퇴장 패턴: D3의 기초적인 접근 방식입니다. 새 요소는 진입하고, 기존 요소는 갱신되며, 제거된 요소는 퇴장합니다. 각 단계는 자체 애니메이션을 가질 수 있습니다.
  • Enter/update/exit pattern: D3's foundational approach. New elements enter, existing elements update, removed elements exit. Each phase can have its own animation.
  • 단계화된 전환: 속성이 동시에가 아니라 순차적으로 변하는 다단계 애니메이션입니다(예: 먼저 위치를 바꾸고, 그다음 크기를 조정하고, 마지막으로 색을 바꿈).
  • Staged transition: Multi-step animation where properties change sequentially rather than simultaneously (e.g., first reposition, then resize, then recolor).
  • 모핑: 마크가 형태를 부드럽게 바꿉니다(원에서 사각형으로, 파이 조각에서 막대로). 경로 기하학의 보간이 필요합니다.
  • Morphing: Marks smoothly change shape (circle to rectangle, pie wedge to bar). Requires interpolation of path geometry.
  • 스태거드 전환: 요소들이 약간의 지연을 두고 하나씩 순서대로 애니메이션되어 계단식 또는 물결 효과를 만듭니다.
  • Staggered transition: Elements animate one after another with a small delay, creating a cascade or wave effect.
  • 스프링/물리 기반: 고정된 지속 시간의 이징 대신 스프링 역학을 사용하여 더 자연스러운 움직임을 만듭니다. React Spring과 Framer Motion에서 흔히 쓰입니다.
  • Spring/physics-based: Uses spring dynamics instead of fixed-duration easing, producing more natural-feeling motion. Common in React Spring and Framer Motion.
  • 연속 애니메이션: 트리거된 전환이 아니라 시각화가 지속적으로 애니메이션됩니다(회전하는 지구본, 흐르는 파티클). 분석보다는 몰입감을 위해 사용됩니다.
  • Continuous animation: Rather than triggered transitions, the visualization continuously animates (rotating globe, flowing particles). Used more for engagement than analysis.

코드 레퍼런스 / Code Reference

// D3.js enter/update/exit with animated transitions
const bars = svg.selectAll("rect").data(newData, d => d.id);

bars.exit()
  .transition().duration(400)
  .attr("width", 0).attr("opacity", 0)
  .remove();

bars.transition().duration(600)
  .attr("x", d => xScale(d.name))
  .attr("height", d => yScale(0) - yScale(d.value))
  .attr("y", d => yScale(d.value));

bars.enter().append("rect")
  .attr("x", d => xScale(d.name))
  .attr("y", yScale(0)).attr("height", 0)
  .transition().duration(600)
  .attr("y", d => yScale(d.value))
  .attr("height", d => yScale(0) - yScale(d.value));