3P by GN⁺ | ★ favorite | 댓글 2개
  • 과학 논문과 데이터 분석에서 흔히 사용되지만 잘못된 시각화 관행 16가지를 예제와 함께 정리한 GitHub 저장소로, R 코드와 시뮬레이션 데이터를 통해 각 사례를 직접 재현 가능
  • 막대 그래프의 평균 비교 오용, 소표본 바이올린 플롯, 단방향 데이터에 양방향 색상 스케일 적용 등 데이터의 분포와 특성을 왜곡하는 시각화를 구체적으로 지적
  • 히트맵의 행·열 재정렬 누락, 이상치 미확인, 파이 차트와 동심원 도넛 차트의 근본적 한계 등 인간의 시각 인지 특성을 고려하지 않은 차트 유형의 문제를 설명
  • 위치 기반 시각화와 길이 기반 시각화의 혼동, 축 절단 막대 그래프 등 오해를 유발하는 구조적 설계 오류에 대한 경고 포함
  • 데이터 시각화를 다루는 모든 연구자와 개발자가 참고할 수 있는 실용적 안티패턴 모음으로, 각 항목에 대안적 시각화 방법도 함께 제시

1. 막대 그래프로 평균 비교를 하지 말 것

  • 평균 비교(means separation) 플롯은 과학 논문에서 가장 흔한 시각화 중 하나로, 두 개 이상 그룹의 평균과 분산, 분포를 보여주는 것이 목적
  • 예제에서 두 그룹이 유사한 평균과 표준편차를 가지지만 분포는 완전히 다름 — 막대 그래프만으로는 이 차이를 감지 불가
  • 막대 그래프를 사용하기 전에 반드시 데이터의 분포를 확인해야 하며, Weissgerber et al.(2015, PLOS Biology)에서도 막대 그래프의 한계를 지적

2. 소표본에서 바이올린 플롯을 사용하지 말 것

  • 바이올린 플롯이나 평활 분포 곡선은 표본 크기가 작을 때 의미 없음
  • 소표본에서는 동일한 관측값이라도 분포와 사분위수가 크게 변동하며, 사분위수가 안정화되려면 n이 50 이상 필요
  • 동일 정규분포에서 여러 번 샘플링하여 사분위수를 비교한 실험 결과로 이를 입증

3. 단방향 데이터에 양방향 색상 스케일을 사용하지 말 것

  • 색상 스케일에서 가장 어두운 색과 가장 밝은 색은 최댓값, 최솟값, 평균, 0 등 의미 있는 값을 나타내야 함
  • 가장 밝거나 어두운 색이 임의의 숫자를 나타내는 것은 "막대 차트에서 가장 긴 막대가 최댓값이 아닌 것"만큼 심각한 오류
  • 히트맵/색상 그라디언트 사용 시 데이터의 방향성(단방향 vs. 양방향)에 맞는 색상 스케일 선택이 필수

4. 막대 그래프 초원(Bar Plot Meadow)을 만들지 말 것

  • 다요인 실험 결과를 막대 그래프로 나열하면 "막대 그래프 초원"이 되어 결과 전달에 비효과적
  • 다요인 실험 결과를 효과적으로 전달하려면 관심 요인별로 그룹핑/패싯팅을 신중하게 설계해야 함
  • 예제에서 Treatment와 Explant이 Response에 미치는 영향을 Variety 수준에서 비교하며, 분석 초점에 따라 레이아웃이 달라져야 함을 강조

5. 히트맵의 행·열 재정렬을 고려하지 않으면 안 됨

  • 히트맵은 과학 논문, 특히 오믹스(omics) 논문에서 매우 흔하지만, 행과 열의 순서를 재정렬하지 않으면 유용한 정보를 추출 불가
  • 클러스터링을 이용한 재정렬이 일반적이지만 유일한 방법은 아니며, 96웰 플레이트처럼 물리적 배치를 나타내는 경우에는 재정렬 불가
  • 행·열 재정렬과 적절한 색상 그라디언트를 결합하면 시각적으로도 아름다운 히트맵 생성 가능

6. 히트맵에서 이상치를 확인하지 않으면 안 됨

  • 이상치는 히트맵의 인식과 해석을 완전히 바꿀 수 있으며, 색상으로 수치 데이터를 표현하는 모든 시각화에 적용되는 문제
  • 예제에서 20개 특성을 측정한 2개 관측값이 이상치 미확인 시 전반적으로 유사해 보이지만, 색상 스케일을 95번째 백분위수 기준으로 조정하면 모든 특성에서 차이가 드러남

7. 각 요인 수준별 데이터 범위를 확인할 것

  • 다요인 실험에서 반응 변수의 범위가 요인 수준에 따라 크게 달라지는 경우가 흔함
  • 가상 실험에서 3가지 화합물을 2개 그룹(대조군 vs. 처리군)으로 측정한 결과, 화합물 1의 농도 범위가 다른 화합물보다 훨씬 좁아 처리 효과를 놓칠 위험이 있음
  • 각 화합물별 데이터 범위를 사전에 확인하지 않으면 중요한 처리 효과를 간과 가능

8. 네트워크 그래프에서 여러 레이아웃을 시도할 것

  • 네트워크 그래프의 외형(토폴로지가 아닌 레이아웃) 은 효과성에 큰 영향을 미침
  • 동일한 데이터에서 3가지 네트워크 그래프가 완전히 다르게 보이며, 9가지 서로 다른 레이아웃을 적용한 예시도 포함
  • 레이아웃에 따라 네트워크의 해석 난이도가 크게 달라지므로 여러 레이아웃을 시도해야 함

9. 위치 기반 시각화와 길이 기반 시각화를 혼동하지 말 것

  • 점·선 그래프에서 값은 x축과 y축의 위치로 표현되고, 막대 그래프에서 값은 x축으로부터의 거리(길이) 로 표현
  • 예제에서 0 기반이 아닌 막대 그래프는 시점 2의 막대 길이를 시점 1의 약 3배로 보이게 하지만, 실제 평균 차이는 약 1.6배 — 길이와 위치를 혼동하면 오해를 유발하는 그래프 생성
  • 축 절단(Broken Axis) 막대 그래프 주의

    • 축 절단은 넓은 범위의 수치를 표현할 때 유용하지만(대안으로 로그 스케일 축 사용 가능), 위치 기반 그래프에서만 적절
    • 막대 그래프에서 축 절단 위치를 바꾸면 특정 막대가 더 길거나 짧아 보이는 착시 효과 발생
    • 예제에서 막대 "d"의 길이가 축 절단 위치에 따라 매우 다르게 보이며, 이는 막대 그래프가 길이 기반 그래픽이기 때문

10. 파이 차트를 만들지 말 것

  • 파이 차트는 비율 데이터를 원형 섹터로 나누어 표현하지만, 인간은 각도와 면적보다 길이를 읽는 능력이 훨씬 우수
  • 2개 그룹, 각 4개 하위 범주의 예제에서 파이 차트는 그룹 간 비교가 매우 어려움
  • 도넛 차트로 단순화해도 호 길이로 데이터를 표현하게 되므로, 차라리 도넛을 펼쳐서 스택드 바 그래프로 만드는 것이 비교에 훨씬 효과적
  • ggplot에서 파이 차트와 도넛 차트의 스크립트는 스택드 바보다 오히려 더 복잡함

11. 동심원 도넛 차트를 만들지 말 것

  • 동심원 도넛에서 데이터가 호 길이로 표현된다고 생각하기 쉽지만 실제로는 호 각도로 표현되며, 인간은 호 각도를 읽는 데 취약
  • 바깥 링의 호 길이가 안쪽 링보다 훨씬 길어서, Group 2와 Group 3가 동일한 값을 가져도 Group 3의 호 길이가 훨씬 길게 보임
  • 그룹 순서(어느 그룹이 어느 링에 배치되는지)가 플롯 인상에 큰 영향을 미쳐 큰 값이 더 짧은 호를 갖는 역설 발생 가능
  • circos plot 등 원형 레이아웃에도 동일한 문제가 적용되며, 대안은 단순히 도넛을 펼쳐 스택드 바 플롯으로 변환하는 것

12. 빨강/초록 및 무지개 색상 스케일을 사용하지 말 것

  • 적록 색각 이상(Deuteranomaly) 은 남성 1/16, 여성 1/256에서 발생하는 가장 흔한 색맹 유형
  • 빨강/초록 및 무지개 색상 스케일은 색맹 사용자에게 문제가 되며, 흑백 인쇄 시에도 정보 보존이 매우 저조
  • viridis 같은 "현대적" 색상 스케일은 색맹 친화적이면서 그레이스케일에서도 안전하고, 시각적으로도 우수

13. 스택드 바 플롯의 재정렬을 잊지 말 것

  • 스택드 바 플롯은 비율 데이터, 커뮤니티 구조, 집단 구조, 혼합 분석(admixture analysis) 시각화에 흔히 사용
  • 100개 샘플과 8개 클래스의 예제에서 막대 순서를 최적화하지 않으면 그래프에서 아무런 패턴도 식별 불가
  • 막대를 재정렬한 후에는 패턴이 극적으로 드러나며, 샘플의 그룹핑과 정렬 최적화가 핵심

14. 스택드 바와 평균 비교를 혼합하지 말 것

  • 스택드 바 플롯은 100%로 합산되는 비율 데이터를, 평균 비교 플롯은 평균의 차이와 분산을 보여주는 것으로, 두 가지는 전혀 다른 시각화 과제
  • 블루베리 식물 실험 예제에서 표준 스택드 바 플롯은 화학 처리가 과일 색상 프로파일을 가장 성숙한 단계(dark blue)로 강하게 이동시킨 것을 명확히 보여줌
  • 스택드 바 위에 오차 막대와 점을 오버레이하면 어떤 오차 막대와 점이 비교되는지 불명확해지며, 상단 스택의 오차 막대가 위로 밀려 y축 해석이 직관적이지 않음
  • 평균 비교와 분산이 시각화의 주목적이라면 별도의 평균 비교 그래프가 더 적합

15. 소표본에서 히스토그램을 사용하지 말 것

  • 히스토그램이 막대 그래프의 대체로 제안되기도 하지만, 빈(bin) 수에 대한 강건성이 소표본에서 매우 낮음
  • 동일 정규분포에서 n = 10, 100, 1000으로 샘플링하고 10, 30, 50개 빈으로 히스토그램을 그리면, 같은 분포임에도 히스토그램 형태가 크게 다름
  • 소표본(n < 30)에서는 모든 데이터 포인트를 직접 그래프에 표시하는 것이 훨씬 바람직하며, n = 100에서도 빈 수에 따라 히스토그램 외형이 급격히 변화
  • 히스토그램이 빈 수 변화에 강건해지려면 표본 크기가 약 1000 이상 필요

16. 이봉 분포(Bimodal) 데이터에 박스플롯을 사용하지 말 것

  • 박스플롯은 중앙값과 사분위수에 초점을 맞추므로, 이봉 분포(및 다봉 분포) 데이터를 제대로 표현 불가
  • 박스플롯을 만들기 전에 반드시 데이터의 분포를 확인해야 함
  • 소~중간 표본 크기(수만 미만)에서는 ggbeeswarm 패키지의 geom_quasirandom()을 사용해 모든 데이터 포인트를 직접 표시하는 것이 최선의 관행
  • 바이올린 플롯과 히스토그램 등 분포 기반 그래픽은 소표본에서 강건하지 않음

댓글과 토론

글 제목이 재미나네요. 원본글을 보시면 샘플 그래프가 같이 나와있어서 보기 편합니다.

Hacker News 의견들
  • 한편으로는 이런 내용이 꽤 훌륭해 보임
    다른 한편으로는 이런 나쁜 그래프 중 상당수가 데이터 포인트가 적다는 점이나 수상한 기저 분포를 숨기려고 의도적으로 골라진 것 같음
    그래서 “친구라면 이런 걸 못 하게 한다”라기보다, “명확히 보여주기보다 흐리게 만드는 그래프를 보면 의도적일 수 있다고 의심하라”에 가까움

    • 틀린 말은 아니지만, 연구자들도 매우 불완전함. 늘 바쁘고, 실제로 작업을 개선할 시간이 없으며, 강조점은 전부 그럭저럭 충분한 논문을 내는 데 있음
      내가 참여한 논문 중 “지금 당장 내보내자”가 아닌 태도였던 경우는 0번이었음
      그래프가 명확하지 않은 이유는 명확하게 만들려면 시간과 노력이 필요한데, 학계에는 그 둘이 크게 부족하기 때문인 경우가 많음. 못생긴 디테일을 의도적으로 숨기는 경우도 분명 가끔 있지만, 그런 나쁜 그림의 주된 원천이라고 보진 않음
    • AMD와 NVIDIA도 해마다 꽤 형편없는 그래프를 쏟아내지만, 그건 의도적
    • 심리학 문헌에서는 의도적이든 아니든 확실히 일어나는 일이고, 특히 첫 번째가 그렇다 봄. 심리학 논문들은 ANOVA의 p값을 보고하고, 모든 것이 정규분포라고 태연히 가정함
      어떤 집단은 굳이 잠자는 개를 건드릴 필요가 없고, 다른 집단은 그냥 모름. 연구를 하면 안 되는 사람들도 있지만 훈련이 부족하고, 싼 박사 인력도 쉽게 구해지는 게 아니라서 지금처럼 된 것임
    • 대부분의 사람은 그래프 배치를 못함. 축 라벨조차 제대로 못 붙이는 경우가 많음
  • “친구라면 이상치를 최댓값으로 잡지 않은 히트맵을 만들게 두지 않는다” 예시는 정말 흔함. 비디오게임의 통계 시각화에서도 자주 보임
    전략·시뮬레이션 게임에는 플레이어가 상황이나 문제를 이해하도록 돕는 시각화가 많은데, 히트맵은 이상치 효과 때문에 색상 기울기가 꽤 쓸모없어지는 일이 잦음
    예를 들어 Oxygen Not Included에서 온도 시각화를 켜면 화산 같은 열원이 있을 때 나머지 색들이 모두 차갑게 보이므로 화면이 파란색이나 분홍빛 빨간색으로만 바뀌곤 함. 1000°C 화산과 약간 과열된 270°C 증기실을 구분할 수 없고, 둘 다 거의 균일한 분홍빛 빨간색이 됨. 과열된 60°C 기지도 상대적으로 차가워서 파랗게 보이니, 온도 문제를 진단하는 히트맵으로는 거의 쓸모없음

    • 특정 온도가 의미 있는 문제를 나타낸다면, 색상은 그 온도를 보여주도록 표준화해야 하고 현재 존재하는 전체 온도 범위에서 자동 생성하면 안 됨
      사실 온도 변화에 따라 색의 의미가 바뀌는 건 꽤 나쁜 아이디어로 들림
    • 여기서는 데이터를 로그 변환하면 적절한 해결책이 되지 않을까? 화산 온도 자체는 관심 밖이라면 제외하거나 이상치로 표시하는 쪽이 맞겠지만
    • 내 친구는 말 그대로 열 지도를 갖고 있음. 즉 적외선 열화상 카메라인데, 명백한 이상치를 디지털 캠코더가 과노출 영역을 보여주듯 빨간색과 흰색 줄무늬로 표시함
      핫스팟 경고로도 작동하고, 동시에 그것들을 무시하라는 알림으로도 작동해서 정말 유용함
  • 예전에 HN에서 어떤 사람이 모든 축의 최솟값이 0이 아닌 그래프는 전부 오해를 부른다고 해서 뜨겁게 논쟁한 적이 있음
    기후변화로 인한 전 지구 기온 상승 그래프를 두고 이야기하던 중이었는데, 그 사람은 Y축인 온도가 0에서 시작하지 않으니 그래프가 misleading하다고 했음. 화씨 0도인지 섭씨 0도인지, 빌어먹을 켈빈 0도인지도 모르겠지만
    심지어 “바닥을 0으로 뒀을 때 보이지 않는 변화라면 그렇게 유의미한 변화가 아닐지도?”라고도 했음. 한동안 인간성에 대한 믿음이 찌그러졌지만, 지금은 좀 더 높은 수준에서 이야기하는 것 같아 다행임. 2016~2020년은 다른 시대였던 듯함

    • 그 사람에게 X축이 “연도”인데 서기 0년부터 시작하는 차트를 건네주면 됨
    • 온도 비율을 의미 있게 만들고 싶다면 실제로는 켈빈에서 0점을 잡아야 함
      25°C가 20°C보다 “25% 더 뜨겁다”처럼 보이게 만드는 그래프는 그런 의미에서 오해를 부른다고 할 수 있음. 물론 이게 지구온난화 부정을 정당화하진 않음
    • 쉬운 해결책은 특정 기준일 이후의 °C 변화량을 그리는 것임. 어떤 그래프든 모든 점에서 y(x_0)를 빼면 됨
    • “0이 모든 축의 최솟값이 아닌 그래프는 오해를 부른다”는 말에는 어느 정도 동의함
      예를 들어 처음 찾은 그래프가 이거임: https://religionnews.com/wp-content/uploads/2014/08/61Years-...
      얼핏 보면 2/3가 줄어든 것처럼 보이는데, 이는 오해를 부름. 이런 하락 그래프는 실제 감소폭을 반영하지 않는 시각적 인상을 주는 경우가 많음
    • 완전히 이해하지 못한 문제에서 지나치게 단순화한 규칙만 가져간 고전적 사례임. 얕은 지식은 위험함
  • 데이터 시각화를 더 읽고 싶다면 Edward Tufte의 The Visual Display of Quantitative Information이 훌륭한 참고서임. 1983년에 처음 출간된 고전이지만 지금도 의미가 있음

    • 흥미로운 책이고 좋은 예와 나쁜 예가 정말 재미있어서 추천할 만함
      다만 글의 중심 전제인 “정보 대비 잉크 비율을 극대화하라”는 매우 그럴듯하지만 근본적으로 결함이 있음. 잉크의 양, 화면에서는 검은 픽셀 수가 시각적 복잡도와 같지 않기 때문임. 뇌가 시각 정보를 해석할 때는 이미 경계 검출, 그룹화, 기타 전처리를 끝낸 상태임
      산점도에서 축이 모서리에서 만나게 하지 않고 데이터 범위만 보여주도록 축을 줄이는 예를 드는데, 잉크는 덜 쓰고 정보는 더 보여주니 윈윈이라고 함. 하지만 비교해 보면 수정된 버전이 시각적으로 더 복잡하다는 게 명백함. 텍스트와 여러 그래프가 같이 있는 복잡한 페이지라면 조각들이 시각적으로 섞여 더 나빠질 것임
      그런 복잡도를 줄이는 한 방법은 전체 플롯처럼 큰 구역을 박스로 감싸는 것인데, 박스는 그 책과 다른 곳에서 Tufte의 절대적 적임. 그렇게 오랫동안 시각적 표현을 봐왔는데도 그런 태도를 유지한다는 게 놀라움
    • 좋은 책임. John Tukey의 고전 논문 Some Graphic and Semigraphic Displays도 추천함: https://www.edwardtufte.com/tufte/tukey
      Tukey는 Tufte의 멘토 중 한 명이었음
    • 역사적 관점에서는 흥미로웠지만, 오늘날 온라인에 훨씬 더 방대한 자료가 있는 상황에서 “비밀” 정보나 추가할 만한 내용이 있는 건 아니었음
      데이터와 그 데이터의 이야기에 맞는 차트를 고르는 고수준 개요로는 http://data-to-viz.com가 훌륭하고, 여러 플로팅 라이브러리 예제도 영감을 얻는 참고자료로 좋음. 예를 들면 https://matplotlib.org/stable/gallery/index.html
    • 좋은 조언이지만, 그 이후로 신경과학과 지각 이해가 발전했다는 점은 염두에 둬야 함
      매우 흥미롭고 관련성도 있지만, 이 주제의 최종 결론은 아님
    • 그는 좋은 데이터 시각화를 만드는 요소를 생각할 수 있는 통찰력 있는 틀을 제시한다고 봄
      하지만 많은 사람이 그 뒤의 논리를 놓치고 그냥 Tufte 스타일을 그대로 베끼는데, 그 결과가 지나치게 양식화되고 우상파괴적으로 보일 때가 있음. R의 ggplot2 기본 플롯이 좋은 예임
  • 흔한 데이터 시각화 실수를 잘 훑어주는 글이라 동료들과 공유할 예정임. 보충자료로는 Kennedy Eliot의 39 studies about human perception in 30 mins를 강력히 추천함: https://medium.com/@kennelliott/39-studies-about-human-perce...
    데이터 시각화 모범 사례를 둘러싼 많은 주장들의 연구 기반을 빠르게 훑어볼 수 있음. 특히 파이 차트를 쓰지 말라는 교조가 흥미로운데, 1930년대부터 디자이너들이 계속 불편해한 주제지만 연구 결과는 좋게 봐도 결론이 뚜렷하지 않음

  • “3. 친구라면 단방향 데이터에 양방향 색상 척도를 쓰게 두지 않는다”에서, 애초에 저 예시들에 왜 색을 쓰는지 모르겠음

    • 정확히 이거임. 같은 정보를 두 번 부호화할 필요가 없음. 그러면 그래프가 무엇을 보여주는지 더 많이 생각해야 할 뿐임
    • 예시에서는 색상 척도가 아무것도 개선하지 않음. 그래도 일반 조언 자체는 여전히 좋음
      많은 경우 단일 변수 표현은 회색 단계만 쓰는 것보다 색상 척도를 쓰면 개선될 수 있음. 그런 경우 단방향 데이터에 양방향 척도를 쓰는 것은 나쁘고, 반대도 마찬가지임
    • 여기서 “예시”는 실제 사용 사례라기보다 색상 척도의 속성을 보여주는 것으로 이해하는 게 나아 보임
      즉 색상 척도를 언제 써야 하는지를 보여주는 예시는 아님
    • 막대 길이를 사용해서 상황을 설명하는 것임. 둘을 동시에 쓰라고 권하는 게 아님
  • 이런 교훈 중 상당수는 새롭지 않음. Willard C. Brinton의 Graphic presentation이라는 1939년 책을 보면 되고, 무료로 접근 가능함: https://archive.org/details/graphicpresentat00brinrich/mode/...

  • 내 눈에는 이것들도 여전히 전부 나쁨. 차트 장식이 너무 많고, 대부분 색도 너무 많음
    그런 선들이 전부 필요하지 않음. 조심스럽게 덜 넣으면 더 읽기 쉬워짐. Edward Tufte의 어떤 책을 봐도 이런 내용이고, 기본 기법 몇 가지만으로도 꽤 멀리 갈 수 있음

  • 바이올린 플롯을 좋아한 적이 없지만, 데이터 시각화 분야 사람은 전혀 아님. 바로 일주일 전에 violin plots should not exist라는 영상을 우연히 보고 퍼즐이 맞춰졌음: https://youtu.be/_0QMKFzW9fw?feature=shared

  • Bill Cleveland의 연구를 바탕으로 이런 아이디어 몇 가지를 일관된 틀로 엮은 How Humans See Data라는 발표를 했음
    https://www.youtube.com/watch?v=fSgEeI2Xpdc

    • 올려줘서 고마움. 훌륭하고 템포도 좋은 발표였고, 40분이 순식간에 지나갔음
      세 단계의 추정 부분이 정말 눈을 뜨게 해줬음. 나중에 보면 당연한데, 직접 설명해주기 전까지는 연결하지 못했음