Matplotlib의 막대 차트(bar chart)에서는 데이터프레임을 정렬한 후 그리는 것만으로도 막대가 표시되는 순서를 자유롭게 결정할 수 있습니다. 아래 예제에서는 정렬하지 않은 원본 데이터와 특정 열을 기준으로 정렬한 데이터를 나란히 비교하여 차이를 확인해 보겠습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변과 사이의 여백을 조정합니다.
- 2차원이며 크기 변경이 가능하고 이질적인(heterogeneous) 표 형태 데이터를 담는 데이터프레임 df를 생성합니다.
- 현재 그림에 첫 번째 서브플롯을 추가합니다.
- 데이터프레임 df로 막대 그래프를 그립니다. (정렬 전 상태)
- 현재 그림에 두 번째 서브플롯을 추가합니다.
- marks 열을 기준으로 정렬된 새로운 데이터프레임 df_sorted를 생성합니다.
- df_sorted로 막대 그래프를 그립니다.
- show() 메서드를 사용해 그림을 화면에 표시합니다.
예제 코드
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pd.DataFrame(
dict(
names=['John', 'James', 'David', 'Gary', 'Watson'],
marks=[23, 34, 30, 19, 20]
)
)
plt.subplot(121)
plt.bar('names', 'marks', data=df, color='green')
plt.subplot(122)
df_sorted = df.sort_values('marks')
plt.bar('names', 'marks', data=df_sorted, color='blue')
plt.show()실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.


코드 설명
왼쪽 그래프는 데이터프레임에 저장된 순서 그대로 막대를 표시하며, 오른쪽 그래프는 sort_values('marks')를 사용해 점수(marks)를 기준으로 오름차순 정렬한 뒤 그린 결과입니다. 이처럼 Pandas의 sort_values() 메서드를 활용하면 막대 차트의 막대 순서를 값의 크기순으로 손쉽게 제어할 수 있습니다. 내림차순으로 정렬하고 싶다면 sort_values('marks', ascending=False)처럼 옵션을 지정하면 됩니다.