본문 바로가기
Python/Matplotlib

Matplotlib - Bar 그래프 .countplot( ) .color_palette( )[ ] .value_count( ).index

by 하니__ 2024. 4. 9.



이러한 포켓몬 7세대까지의 데이터들이 있다고 할 때에

 

세대별 포켓몬의 마릿수는 어떻게 분포 되어 있는지 막대그래프 형태로 알아보자

 

 

우선

 

 

 

이전 까지의 방법으로는 value_count( )와

groupby( )[ ].count( ) 를 이용하여 수치화된 데이터로 알아 볼 수 있었다

 

 

 

seaborn의 .countplot( ) 사용

 

 

import seaborn as sb

 

우선 seaborn 라이브러리를 사용하기위해 임포트를 해주고 타이핑을 줄이기 위해 sb로 줄여보자

 

sb.countplot(data=df , x= 'generation_id')
plt.show()

 

그 후 .countplot( ) 을 이용해 막대형 그래프를 만들자

 

하지만 뭔가 정신없고 여러모로 손을 봐줘야 할 것같다

 

막대 색상 설정 .color_palette( )[ ]
base_color = sb.color_palette()[0]

 

우선 막대그래프의 색을 통일 시켜보자

sb.color_palette()[0]

를 이용하여 색을 통일 시킨다 [   ]대괄호 안의 숫자는 다른 숫자를 사용하여

다른 색으로 사용하여도 무관하다

그 후 변수를 넣어 저장하자

 

sb.countplot(data = df, x = 'generation_id', color = base_color)
plt.show()

 

그리고 (color = 저장한 변수)를 위의 파라미터 안에 집어넣자

 

 

 

 

 

 

 

 

정렬 하는 법 .value_count( ).index

 

 

df['generation_id'].value_counts()

 

위에 그래프에 우리가 필요한 ['generation_id']에 .value_count() 를 입력 하면

generation_id
5    156
1    151
3    135
4    107
2    100
7     86
6     72
Name: count, dtype: int64

이렇게 가장 많은 순서로 정렬이 된다

 
df['generation_id'].value_counts().index

 

그리고 뒤에 .index를 추가하면 인덱스만 출력이 되게 된다

Index([5, 1, 3, 4, 2, 7, 6], dtype='int64', name='generation_id')

 

이렇게

 
base_order = df['generation_id'].value_counts().index

 

이것을 base_order라고 변수명을 지정해 저장해주자

 

 
sb.countplot(data=df, x= 'generation_id', color=base_color, order=base_order)
plt.show()

 

그리고 파라미터에 order = base_order로 추가해주자

 

 

 

 

 

정렬이 되어 있으니 보기가 편해졌다

 

 

역순 정렬 [ : : -1]

 

 

 

reverse_order = base_order[ : : -1]

 

방금 지정했던 base_order에 [ : : -1]을 하여 역순으로 돌려 reverse_order 라고 저장해주자

 

sb.countplot(data=df, x= 'generation_id', color=base_color, order=reverse_order)
plt.show()

 

그리고 이번엔 base_order를 지우고 reverse_order로 입력하면

 

 

 

 

X.ticks( )

 

 

sb.countplot(data=df, x='type_1', color=base_color)
plt.show()
 

데이터가 많은데 글씨가 길면 이렇게 화면에 보이지 않게 된다

 

이럴때에는

plt.xticks(rotation = 320)

를 추가하여 320도 회전 시켜주자(각도는 자유)

sb.countplot(data=df, x='type_1', color=base_color)
plt.xticks(rotation = 320)
plt.show()

 

위의 그래프보다는 보기가 편해졌다

 

 

만약 세로형 막대 그래프가 맘에 들지 않는다거나

글씨를 회전시키는게 맘에 들지않는다면 x='type_1'의 x를 y로 바꿔주게 되면

sb.countplot(data=df, y='type_1', color=base_color, order = base_order)
plt.show()

 

 

가로형 막대그래프가 되며 글씨도 회전 시킬 이유가 없어진다

 

그때 그때 적절하게 그래프를 보기 좋게 고쳐보자