Coding Diary.

(데이터분석) seaborn과 matplotlib으로 막대그래프 작성하기 본문

Coding/Data analysis

(데이터분석) seaborn과 matplotlib으로 막대그래프 작성하기

life-of-nomad 2024. 5. 23. 13:30
728x90
반응형

1. Seaborn으로 막대 그래프 작성하기

  • 도수를 나타내는 기본적인 막대 그래프는 seaborn의 countplot함수를 사용하여 작성할 수 있습니다.
seaborn.countplot(*, x=None, y=None, data=None, order=None, orient=None, color=None)

 

1) 막대 그래프 색상 지정하기

#필요한 패키지 불러오기
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns

#csv 파일을 읽은 다음 뒤에서부터 10개의 행 확인하기
df = pd.read_csv('diamonds.csv')
print(df.shape)
df.head(10)

#명령문 끝에 세미콜론(;)을 추가하여 차트 관련 정보가 표시되지 않게 하기
sns.countplot(data=df, x='cut');

  • 위의 예시에서는 모든 막대가 서로 다른 색상을 갖습니다. 이와 같이 여러 색상을 활용하면 많은 변수가 존재하는 차트에서 각 범주의 레이블과 시각적 부호 간의 연관성을 나타낼 수 있습니다.
  • 하지만 그런 경우가 아니라면 모든 막대를 같은 색상으로 나타내어 불필요한 시각적 요소를 제거하는 것이 좋습니다.
  • colorcolor 인수를 사용하면 모든 막대를 동일한 색상으로 나타낼 수 있습니다.
  • 첫 번째 방법은 seaborn의 color_palette 함수를 사용하여 색상 값을 선택하는 것입니다.
  • 이 함수는 자신의 인수에 설정된 색상 팔레트에 대응하는 튜플 리스트를 반환합니다.
sns.color_palette()

  • 이런 식으로 기본 색상의 배열 또는 리스트가 반환됩니다.
  • 이 리스트에서 첫 번째 색상만 가져오기 위해 인덱스를 0으로 지정하고 이를 color라는 변수에 할당합니다. 
  • 이제 countplot 함수 매개변수에 color을 방금 설정한 변수 color로 지정하면 한 가지 색상의 차트를 얻을 수 있습니다.
  • 두 번째 방법은 원하는 색상을 직접 지정하는 것입니다.
  • tableau 색상 팔레트에 존재하는 파란색을 선택하면 됩니다. 
#color_palette()로 현재 설정된, 혹은 기본으로 설정된 팔레트를 RGB 튜플 리스트로 반환할 수도 있습니다.
#각 튜플은 빨간색, 초록색, 파란색 채널 값을 나타내는 세 자리 숫자들로 구성되며 특정 색상을 나타냅니다.
#RGB 색상의 첫번째 튜플 선택하기
base_color = sns.color_palette()[0]

#첫 번째 방법 : 색상 팔레트를 직접 사용하기
sns.countplot(data=df, x='cut', color=base_color)

#두 번째 방법 : tableau blue를 사용하는 차트
sns.countplot(data=df, x='cut', color='tab:blue')

2) 막대 그래프 내림차순 정렬하기

  • 막대 그래프를 내림차순으로 정렬하는 방법은 countplot 함수에 order이라는 새 매개변수를 도입하면 됩니다.
  • 이 매개변수는 막대 정렬 순서를 나타내는 리스트를 인수로 갖습니다.
  • 코딩으로 리스트를 작성할 수 있는데, 번거로운 방법입니다.
  • 이때, pandas 함수 value_counts를 사용하면 됩니다.
  • value_counts는 변수의 각 범주에 속하는 데이터의 개수를 파악합니다.
  • 그리고 그 결과를 크기에 따라 내림차순으로 정렬한 리스트를 생성합니다.
  • 막재의 순서를 가져오려면 .index를 추가하여 인덱스만 가져오게 한 다음 이를 order라는 변수에 저장하고 counterplot에서 매개변수 order을 변수 order로 지정하면 됩니다.
  • 이 함수는 series또는 dataframe의 한 열에 적용할 수 있습니다.
order = df['cut'].value_counts().index
sns.countplot(data=df, x='cut', color='tab:blue', order=order)

 

3) x축의 레이블 회전하기

  • x축의 레이블이 아주 긴 경우 유용합니다.
  • 이때, matplotlib의 xticks함수를 사용하면 됩니다. 
  • 그리고 매개변수 rotation을 원하는 값으로 설정하면 됩니다. 15도로 설정해보겠습니다.
sns.countplot(data=df, x='cut', color='tab:blue', order=order);
plt.xticks(rotation=15)

 

4) 막대 그래프 수평으로 만들기

  • 매개변수 x를 매개변수 y로 바꾸면 그래프를 수평으로도 만들 수 있습니다.
sns.countplot(data=df, y='cut', color='tab:blue', order=order)

 

 

2. Matplotlib으로 막대 그래프 작성하기

  • seaborn이 아닌 matplotlib을 사용해도 비슷한 차트를 작성할 수 있습니다.
  • matplotlib.pyplot.bar()함수를 사용하면 됩니다.
matplotlib.pyplot.bar(x, y, width=0.8, botton=Non, *, align='center', data=None)
#고유한 값으로 구성된 series 반환하기
x = df['cut'].unique()

#각 고유한 값의 도수로 구성된 series 반환하기
y = df['cut'].value_counts(sort=False)

plt.bar(x, y)

#축 레이블 지정하기
plt.xlable('cut')
plt.ylable('count')

#차트 그리기
plt.show()

3. seaborn.countplot()을 사용해 막대 그래프 정렬하기

#정적인 방식으로 정렬하기
sns.countplot(data=df, x='color', color='tab:blue', order=['G', 'E', 'F', 'H', 'D', 'I', 'J']);

#동적인 방식으로 정렬하기
#'color' 열에 존재하는 고유의 값의 도수를 센 다음 내림차순으로 정렬하기
#series 반환하기
freq = df['cut'].value_counts()

#해당 series의 인덱스 저장하기
gen_order = freq.index

#'generation_id' 도수의 내림차순으로 정렬한 막대 그래프 작성하기
sns.countplot(data=df, x='cut', color='tab:blue', order=gen_order);

728x90
반응형