matplotlib, seaborn

yeoni·2023년 6월 5일
0

pie

  • autopct: 부채꼴 안에 표시될 숫자의 형식
  • startangle: 부채꼴이 그려지는 시작 각도를 설정
  • counterclock=False: 시계 방향 순서로 부채꼴 영역이 표시
  • explode: 부채꼴이 파이 차트의 중심에서 벗어나는 정도를 설정
  • shadow: 그림자 설정
  • colors: 컬러 지정
  • wedgeprops: 부채꼴 영역의 스타일을 설정
import matplotlib.pyplot as plt

ratio = [34, 32, 16, 18]
labels = ['Apple', 'Banana', 'Melon', 'Grapes']
colors = ['silver', 'gold', 'whitesmoke', 'lightgray']

plt.pie(ratio, labels=labels, autopct='%.1f%%', startangle=260, counterclock=False, explode = [0, 0.10, 0, 0.10], shadow=True, colors=colors)
plt.show()

여러개의 그래프

subplot

  • subplot(nrows, ncols, index)
  • 축공유: plt.subplot(nrows, ncols, index, sharex or sharey)
import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

# nrows=1, ncols=2, index=1
# plt.subplot(121)로도 표현 가능
plt.subplot(1, 2, 1)                
plt.plot(x1, y1, 'o-')
plt.title('1st Graph')
plt.xlabel('time (s)')
plt.ylabel('Damped oscillation')

# nrows=1, ncols=2, index=2
plt.subplot(1, 2, 2)                
plt.plot(x2, y2, '.-')
plt.title('2nd Graph')
plt.xlabel('time (s)')
plt.ylabel('Undamped')

plt.show()

subplots

  • sharex, sharey: bool or {'none', 'all', 'row', 'col'}, default: False
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

fig, ax = plt.subplots(1, 2, figsize=(18, 8))

sns.countplot(x='sex', data=titanic, ax=ax[0])
ax[0].set_title('Count plot - sex')
ax[0].set_ylabel('')

sns.countplot(x='sex', data=titanic, ax=ax[1], hue='survived')
ax[1].set_title('Sex: survived and sex')

# 서브플롯간 간격 조정
plt.subplots_adjust(top=1, bottom=0.1, left=0.1, right=1, hspace=0.5, wspace=0.5)

plt.show()

--------------------------------------------------------

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12,6))

women = titanic[titanic['sex']=='female']
men = titanic[titanic['sex']=='male']

ax = sns.histplot(women[women['survived']==1]['age'], bins=20, label='survived', ax=axes[0], kde=False)
ax = sns.histplot(women[women['survived']==0]['age'], bins=40, label='not_survived', ax=axes[0], kde=False)
ax.legend(); ax.set_title('Female')

ax = sns.histplot(men[men['survived']==1]['age'], bins=20, label='survived', ax=axes[1], kde=False)
ax = sns.histplot(men[men['survived']==0]['age'], bins=40, label='not_survived', ax=axes[1], kde=False)


Seaborn - 패싯 그리드 : FacetGrid

  • 다양한 범주형 값을 가지는 데이터를 시각화하는데 좋은 방법
  • 행, 열 방향으로 서로 다른 조건을 적용하여 여러 개의 서브 플롯 제작
  • 각 서브 플롯에 적용할 그래프 종류를 map() 메서드를 이용하여 그리드 객체에 전달
  • plt.hist(히스토그램), plt.regplot(산점도)
grid = sns.FacetGrid(titanic, row='pclass', col='sex', height=4, aspect=2)
# bins: 히스토그램의 가로축 구간의 개수, color: 컬러 설정, alpha: 투명도
grid.map(plt.hist, 'age', alpha=0.8, bins=20)
# 범례 추가
grid.add_legend();
# xlabel, ylabel 추가
grid.set_axis_labels()
# x, y축 경계 설정
grid.set(xlim=(N, N), ylim=(N, N))

plotly.express

  • px.line( 데이터 프레임, x축에 들어갈 column명, y축에 들어갈 column명 )
  • color hue와 비슷한 역할, 컬럼명 넣기
  • markers = bool: 마커 생성, symbol=column 명: 마커 다르게
  • labels : column명이 각 축의 레이블로 사용되지만, 이를 변경하고 싶을 때, dictionary 형태로 지정
  • title : 그래프의 타이틀을 지정
  • width, height: 너비, 높이 설정
  • hover_name : tooltip에 볼드체로 이름으로 표시
  • hover_data : tooltip에 내용으로 표시
  • facet_col : 지정한 데이터에 대해서 가로 방향으로 subplot을 표시
  • facet_row : 지정한 데이터에 대해서 세로 방향으로 subplot을 표시
  • facet_col_wrap : 최대 표시되는 column 개수
import plotly.express as px
fig = px.line(df, x='year', y='lifeExp', color='country', symbol="country", labels={"year":"년도","pop":"총 인구수"}, title='오세아니아의 연도별 인구 변화')
fig = px.histogram(titanic, x='age', width = 500, height = 300)
fig.show()

crosstab

  • pd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)
  • aggfunc: 집계함수
  • margins=True: 행/열의 소계값이 함께 산출
  • margins_name: margins True 경우 행/열 지정
  • dropna=True: NaN 포함 x
  • normalize: index, columns, all 비율로 표시
# margins 합계
pd.crosstab(titanic['pclass'], titanic['survived'], margins=True)

Reference
1) https://wikidocs.net/92114
2) https://wikidocs.net/141537
3) matplotlib subplots
4) https://steadiness-193.tistory.com/201
5) https://wikidocs.net/180789
6) https://suy379.tistory.com/149

profile
데이터 사이언스 / just do it

0개의 댓글