본문 바로가기

데이터 분석/파이썬

[나도코딩] 데이터 분석 및 시각화 - matplotlib 요약

https://youtu.be/PjhlUzp_cU0

 

> matplotlib 가져오기

import matplotlib.pyplot as plt

 

>plot

x=[1,2,3]
y=[2,4,8]
plt.plot(x,y)    #라인 출력 안하려면 plt.show()

 

>title 설정 : plt.title('그래프 제목')

 

 

> 축 설정(xlabel / ylabel)

plt.xlabel('X축', color='red', loc='right')#left, center, right
plt.ylabel('Y축', color='#00aa00', loc= 'top') # top, center, bottom

 

>축 표시값 설정 (xticks / yticks)

plt.xticks([1,2,3])                 #x축의 범위를 1, 2, 3순으로 표시
plt.yticks([3,6,9,12])            #y축의 범위를 3,6,9,12순으로 표시
plt.show()

 

> 범례(plt.legend)

plt.legend(loc ='upper right')  #loc : 위치설정 -> upper right, lower right
plt.legend(loc =(0.5,0.5))

 

>스타일

선의 두께 : linewidth

선 스타일 : linestlye (ls)

색깔 : color

투명도 : alpha

마커 : marker 

마커사이즈 : markersize(ms)

마커테두리색깔 : markeredgecolor (mec)

마커 안의 색깔 : markerfacecolor (mfc)

 

>포맷

#포맷 순서 : 색깔  -> 마커 -> 라인스타일

ex1) plt.plot(x,y,'ro--')  #color, marker, linestlye


ex2) plt.plot(x,y,'bv:')  #color, marker, linestlye

 

>그래프 크기 :  plt.figure(figsize=(a,b))

>그래프 해상도 : dpi

 

>배경색 : facecolor

 

> 파일저장

: plt.savefig('파일 이름' , dpi= 해상도 설정)

 

 

>텍스트

 

#label 만들기

 

>여러 데이터 표현

#coivd-19 백신 종류별 접종 인구 
dbdays=[1,2,3]     #10월 1일 2일 3일
az =[2,4,8]            
pfizer =[5,1,3]
moderna =[1,2,5]

plt.plot(days, az, label='az')
plt.plot(days, pfizer, label='pfizer', marker ='o')
plt.plot(days, moderna, label='moderna', marker='s')
plt.legend(ncol =3)  # ncol : 열의 개수만큼 범례 표시

 

>막대 그래프

labels=['kang', 'seo', 'jeong']          #이름
values =[190, 187, 184]                 #키

colors=['r','g','b']                          #color 리스트 만들기

plt.ylim(175,195)                          #y축의 데이터 제한

plt.bar(labels, values, color=colors, alpha=0.5) 


#rotation : 이름 데이터 각도 설정
# width : 바의 두께

ex)
plt.bar(labels, values, width=0.3) #width : 바의 두께
plt.xticks(rotation=45) # x축의 이름 데이터 각도를 45도로 설정
plt.yticks(rotation= 45) #y축의 키 데이터 각도를 45도로 설정


#옆으로 누운 그래프 : barh
plt.barh(labels, values)
plt.xlim(175,195) # xlim의 범위 수정


#패턴 넣기 : set_hatch()

 

 

>dataframe

 

# index와 label에 들어갈 열 값을 넣어주면 됨
plt.plot(df['지원번호'], df['영어'])
plt.plot(df['지원번호'], df['수학'])
plt.grid(axis ='y', color ='purple', alpha=0.2) #그리드 그리기 axis :축 값, color , alpha
ex)

 

 

>누적 막대 그래프 : bottom 옵션으로 밑에 깔기

plt.bar(df['이름'], df['국어'], label="국어")
plt.bar(df['이름'], df['영어'], bottom =df['국어'], label="영어") #밑에 놓고 그 데이터를 쌓음
plt.bar(df['이름'], df['영어'], bottom =df['국어']+df['영어'], label="수학") #밑에 놓고 그 데이터를 쌓

plt.xticks(rotation=60)
plt.legend()

=> 밑에 순서대로 국어, 영어, 수학 누적막대 그래프

 

> 다중그래프

#x값의 위치 조정을 통해 다양한 데이터를 한 그래프에 표현
index= np.arange(N)  // array([0, 1, 2, 3, 4, 5, 6, 7])

w=0.25  

plt.bar(index-w, df['국어'], width=w)
plt.bar(index, df['영어'] ,width=w)
plt.bar(index+w, df['수학'] ,width=w)

plt.xticks(index, df['이름'], rotation =60)

 

> 원 그래프

- 원그래프 그리기 : plt.pie (values, labels)

- 옵션
# 퍼센트 설정 : autopct = "%. 1f %%" -> 소수점 한자리까지 표현
# 시작 앵글 : startangle
# 방향 : counterclock 
# 띄우기 : explode
# 원의 두께 : wedgeprops {width : edgecolor(파트들의 테두리 선 두께)}

ex1)

values=[30,25,20,13,10,2]
label1= ['Python', 'Java','JavaScript','C#', 'C/C++', 'ETC']

plt.pie(values, labels=label1, autopct='%.1f%%', startangle=90, counterclock=False,  explode=explode))
plt.show()


ex2)
wedgeprops  {'width':0.8, 'edgecolor' :'w'}
plt.pie(values, labels=label1, autopct = "%.1f%%", startangle=90, counterclock=False, explode=explode , wedgeprops =wedgeprops)

 

 

 

>산점도(scatter)

plt.scatter(df['영어'], df['수학'])
plt.xlabel('english score')
plt.ylabel('math score')