한번 봤던 내용들인데 복습 차 필사했다.

Principle of Proportion Ink

실제 값과 그에 표현되는 잉크 양은 비례해야 한다.

  • 모든 시각화 자료에서 통용되는 원칙이다.
  • 반드시 x축의 시작은 0이다.
    • plot의 세로 비율을 통해 데이터의 차이를 나타내야 한다.

왼쪽은 0부터 시작하지 않았다. 따라서 표현되는 그래프의 비율이 실제 데이터의 비율을 반영하지 못한다. 즉, 불필요한 오해를 방지하기 위해서는 오른쪽 그림과 같은 그래프를 사용해야 한다.

Bar plot

  • 말 그대로 bar로 데이터를 표현.
  • caetgory에 따른 수치값을 비교하기에 적합

막대의 방향에 따른 분류

matplotlib에서의 표현

  • .bar() : x축에 범주, y축에 데이터
  • .barh() : y축에 범주, x축에 값
    • 범주가 많을 때 적합

여러 개의 범주

  • Bar plot은 범주에 대한 값을 표현
    • 1개의 feature에 대한 값만을 표현
    • 여러 group를 보여주려면 다른 방법을 찾아봐야 한다.

solution

  • 여러개의 plot
  • 1개의 plot에 동시에 표현
    • 쌓아서
    • 겹쳐서
    • 이웃에 배치해서

Stacked bar plot

  • 2개 이상의 그룹을 stack
  • 가장 아래에 stack된 bar의 분포는 파악하기 쉽다.
    • 그 위에 stack된 bar들은 분포를 알기 어렵다.
  • matplotlib
    • .bar()에서 bottom parameter로 쌓아준다. -.barh()에서 left parameter로 쌓아준다.

Percentaged stacked bar chart

stacked bar plot은 전체 분포를 알기 어려우니, percentage로 stacked bar chart를 바꿔본 형태이다.

Overlapped bar plot

  • 2개 그룹만 비교하려면 좋음.
    • 투명도(alpha)를 조절하여 비교.
    • 색상의 명도, 채도에 따라서도 투명도의 효과가 달라지니 유념하자.
  • 3개 그룹 이상을 비교하려면 별로다.
    • 이럴 때는 area plot이 좋다.

Grouped bar plot

가장 효과적인 방법!!

  • 그룹별 bar를 이웃되게 배치
  • matplotlib에서는 구현이 까다로워서 seaborn에서 다룬다.
    • .set_xticks(), .setxticklabels()를 사용한다.

앞선 방법들 모두 그룹이 5~7개 일 때 효과적이다. 그룹이 더 많다면 다른 방법 필요.

데이터 정렬

  • 정렬을 필수다
    • 가령, pandas에서는 sort_valeus(), sort_index()
  • 시간순, 크기순, 범주의 순서, 범주의 값에 따라 적합하게 정렬해주자.

적절한 공간 활용

  • matplotlib의 bar plot은 ax에 꽉 차서 답답하다
  • 다음의 메서드로 적절히 조정하자
    • X/Y axis limit(.set_xlim(), .set_ylime())
    • Spines(.spines[spine].set_visible())
    • gap(width)
    • legend(.legend()), 범례를 어디에 두느냐
    • margins(.margins())

Leave a comment