[2024.09.30] 필수 온라인 강의 Part2 파이썬 라이브러리 활용 CH04 데이터 시각화 라이브러리(Matplotlib, Seaborn)
Matplotlib
- 파이썬에서 데이터를 차트나 플롯으로 시각화하는 라이브러리
- matplotlib.pyplot 모듈의 함수를 이용하여 간편하게 그래프를 만들고 변화를 줄 수 있음
- pip install matplotilb
- 사용법 : import matplotlib.pyplot as plt
- https://matplotlib.org/에서 다양한 설명 참고
- 숫자 입력하기
1) 한개의 숫자 리스트 입력
- 한개의 숫자 리스트 형태로 값을 입력하면 y값으로 인식
- x값은 기본적으로 [0,1,2,3] 순서대로 설정
- 파이썬 튜플, 넘파이 배열 형태로도 가능
- plt.show() 함수는 그래프를 화면에 나타나도로 함
plt.plot([2, 3, 4, 5])
plt.show()
2) 두개의 숫자 리스트 입력
- 두 개의 숫자 리스트 형태로 값을 입력하면 순서대로 x, y값으로 인식
- 순서쌍(x,y)로 매칭된 값을 좌표평면 위에 그래프 시각화
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show()
- 축 레이블 설정
- xlabel() 함수를 사용하여 그래프의 x축에 대한 레이블 표시
- ylabel() 함수를 사용하여 그래프의 y축에 대한 레이블 표시
# xlabel() 함수에 'X-Label' 입력하여 x축에 대한 레이블 표시
# ylabel() 함수에 'Y-Label' 입력하여 y축에 대한 레이블 표시
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.xlabel('X-Label')
plt.ylabel('Y-Label')
plt.show()
- 범례(Legend) 설정
- 범례(Legend)는 그래프에 데이터의 종류를 표시하기 위한 텍스트
- legend() 함수를 사용해서 그래프에 범례 표시
- plot() 함수에 label 파라미터 값으로 삽입
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], label = 'Square')
plt.legend()
plt.show()
- 축 범위 설정
- xlim() : X축이 표시되는 범위 지정 [xmin, xmax]
- ylim() : Y축이 표시되는 범위 지정 [ymin, ymax]
- axis() : X, Y축이 표시되는 범위 지정 [xmin, xmax, ymin, ymax]
- 입력 값이 없으면 데이터에 맞게 자동으로 범위 지정
plt.plot([1, 2, 3, 4], [3, 6, 9, 12])
plt.xlabel('X-Label')
plt.ylabel('Y-Label')
plt.xlim([0, 5]) # X축의 범위: [xmin, xmax] = [0, 5]
plt.ylim([0, 15]) # Y축의 범위: [ymin, ymax] = [0, 15]
plt.show()
- 동시에 적용
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.axis([0, 6, 0, 20]) # axis() : X, Y축이 표시되는 범위 지정 [xmin, xmax, ymin, ymax]
plt.show()
- 선 종류 설정
- plot() 함수의 포맷 문자열 사용 : '-' (Solid), '- -' (Dashed), ' : ' (Dotted), ' -. ' (Dash-dot)
- plot() 함수의 linestyle 파라미터 값으로 삽입 : '-' (solid), '- -' (dashed), ' : ' (dotted), ' -. ' (dashdot)
- 튜플을 사용하여 선의 종류 커스터마이즈 : (0, (1, 1)) [dotted], (0, (5, 5)) [dashed], (0, (3, 5, 1, 5)) [dashdotted]
- plot() 함수의 포맷 문자열 사용
plt.plot([1, 2, 3], [4, 4, 4], '-', color='C0', label='Solid')
plt.plot([1, 2, 3], [3, 3, 3], '--', color='C0', label='Dashed')
plt.plot([1, 2, 3], [2, 2, 2], linestyle='dotted', color='C0', label='Dotted')
plt.plot([1, 2, 3], [1, 1, 1], linestyle='dashdot', color='C0', label='Dash-dot')
plt.xlabel('X-Label')
plt.ylabel('Y-Label')
plt.axis([0.8, 3.2, 0.5, 5.0])
plt.legend(loc='upper right', ncol=4)
plt.show()
- 튜플을 사용하여 선의 종류 커스터마이즈
plt.plot([1, 2, 3], [4, 4, 4], linestyle=(0, (1, 1)), color='C0', label='(0, (1, 1))')
plt.plot([1, 2, 3], [3, 3, 3], linestyle=(0, (1, 5)), color='C0', label='(0, (1, 5))')
plt.plot([1, 2, 3], [2, 2, 2], linestyle=(0, (5, 1)), color='C0', label='(0, (5, 1))')
plt.plot([1, 2, 3], [1, 1, 1], linestyle=(0, (3, 5, 1, 5)), color='C0', label='(0, (3, 5, 1, 5))')
plt.xlabel('X-Label')
plt.ylabel('Y-Label')
plt.axis([0.8, 3.2, 0.5, 5.0])
plt.legend(loc='upper right', ncol=2)
plt.tight_layout()
plt.show()
# tuple(offset, (on_off_seq))
# offset : 플롯의 간격 띄우기를 조정
- Matplotlib 마커 설정
- 기본적으로는 실선 마커
- plot() 함수의 포맷 문자열 (Format string)을 사용해서 마커 지정
- 'ro’는 빨간색 (‘red’)의 원형 (‘circle’) 마커를 의미
- 'k^’는 검정색 (‘black’)의 삼각형 (‘triangle’) 마커를 의미
- plot() 함수의 marker 파라미터 값으로 삽입
- 's'(square), 'D'(diamond)
plt.plot([4, 5, 6], "b")
plt.plot([3, 4, 5], "ro")
plt.plot([2, 3, 4], marker="s")
plt.plot([1, 2, 3], marker="D")
plt.plot([0, 1, 2], marker='$A$')
plt.show()
- Matplotlib 색상 설정
- plot() 함수의 포맷 문자열 (Format string)을 사용해서 색상 지정
- plot() 함수의 color 파라미터 값으로 삽입
- 색상확인 : https://matplotlib.org/stable/gallery/color/named_colors.html
- 타이틀 설정
- title() 함수를 이용하여 타이틀 설정
- title() 함수의 loc 파라미터 값으로 위치 설정
- loc 파라미터 : {‘left’, ‘center’, ‘right’}
- title() 함수의 pad 파라미터 값으로 타이틀과 그래프와의 간격(포인트 단위) 설정
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.xlabel('X-Label')
plt.ylabel('Y-Label')
plt.title('Graph Title', loc='center', pad=100) # 타이틀
- 눈금 표시
- xticks(), yticks() 함수는 각각 x축과 y축의 눈금 설정 - 막대 그래프
- bar() 함수 이용하여 막대 그래프 시각화
- bar() 함수의 color 파라미터 값으로 색상 설정
- bar() 함수의 width 파라미터 값으로 막대 폭 설정
x = [1, 2, 3]
years = ['2022', '2023', '2024'] # years는 X축에 표시될 연도이고, values는 막대 그래프의 y 값
values = [300, 100, 700]
plt.bar(x, values, color=['r', 'g', 'b'], width=0.4) # color와 width로 막대 그래프 파라미터 설정
#plt.bar(x, values, color=['r', 'g', 'b'], width=0.8)
plt.xticks(x, years) # xticks(x, years) : x축의 눈금 레이블에 '2022', '2023', '2024' 순서대로 설정
plt.show()
- 산점도
scatter() 함수 이용하여 산점도 시각화
scatter() 함수의 color 파라미터 값으로 마커의 색상 설정
scatter() 함수의 size 파라미터 값으로 마커의 크기 설정
import numpy as np # numpy의 random 모듈의 rand 함수를 통해 숫자 랜덤하게 생성
np.random.seed(0) #seed는 random이 바뀌지 않게 동일하게 계속 쓸 수 있음
n = 50
x = np.random.rand(n)
y = np.random.rand(n)
size = (np.random.rand(n) * 20)**2 # size로 산점도 파라미터 설정
colors = np.random.rand(n) # color로 산점도 파라미터 설정
plt.scatter(x, y, s=size, c=colors)
plt.show()
- 다양한 그래프 종류
- matplotlib.pyplot.bar( ) : 막대 그래프
- matplotlib.pyplot.barh( ) : 수평 막대 그래프
- matplotlib.pyplot.scatter( ) : 산점도
- matplotlib.pyplot.hist( ) : 히스토그램
- matplotlib.pyplot.errorbar( ) : 에러바
- matplotlib.pyplot.pie( ) : 파이 차트
- matplotlib.pyplot.matshow( ) : 히트맵 - Matplotlib subplot 이용한 여러 개 그래프 시각화
- subplot() 함수는 영역을 나눠 여러 개의 그래프 시각화
- plt.subplot(row, column, index)
- tight_layout() 함수는 모서리와 서브플롯의 모서리 사이의 여백(padding)을 설정
y1 = np.cos(2 * np.pi * x1)
y2 = np.cos(2 * np.pi * x2)
plt.subplot(2, 1, 1) # subplot # nrows=2, ncols=1, index=1
plt.plot(x1, y1, 'o-')
plt.title('1st Graph')
plt.subplot(2, 1, 2) # subplot # nrows=2, ncols=1, index=2
plt.plot(x2, y2, '.-')
plt.title('2nd Graph')
plt.tight_layout() # tight_layout() 함수는 모서리와 서브플롯의 모서리 사이의 여백(padding)을 설정
plt.show()
- 한 좌표 평면 위에 다른 종류의 그래프 시각화
- plt.subplots() 함수는 여러 개 그래프를 한 번에 가능
- plt.subplots() 함수의 디폴트 파라미터는 1이며 즉 plt.subplots(nrows=1, ncols=1) 의미
- plt.subplots() 함수는 figure와 axes 값을 반환
- figure : 전체 subplot 의미
- 서브플롯 안에 몇 개의 그래프가 있던지 상관없이 그걸 담는 전체 사이즈를 의미
- axe : 전체 중 낱낱개 의미
ex) 서브플롯 안에 2개(a1,a2)의 그래프가 있다면 a1, a2 를 일컬음
- .twinx() 함수는 ax1과 축을 공유하는 새로운 Axes 객체 생성
import matplotlib.pyplot as plt
import numpy as np
# x는 X축에 표시될 연도이고, y1, y2는 y 값
x = ['2022', '2023', '2024']
y1 = np.array([1, 7, 14])
y2 = np.array([1, 3, 9])
# plt.subplots(nrows=1, ncols=1) = plt.subplots()
fig, ax1 = plt.subplots() # plt.subplots() 함수는 여러 개 그래프를 한 번에 가능, 객체 생성
ax1.plot(x, y1, '-s', color='green', markersize=7, linewidth=5, alpha=0.7) # -s(solid line style + square marker), alpha(투명도)
ax2 = ax1.twinx() # .twinx() 함수는 ax1과 축을 공유하는 새로운 Axes 객체 생성
ax2.bar(x, y2, color='deeppink', alpha=0.7, width=0.7)
#plt.twinx()
#plt.bar(x, y2, color='deeppink', alpha=0.5)
plt.show()
'Study > Python' 카테고리의 다른 글
파이썬 라이브러리 - BeautifulSoup (웹 데이터 수집 라이브러리) (1) | 2024.09.30 |
---|---|
파이썬 라이브러리 - Seaborn(데이터 시각화) (0) | 2024.09.30 |
파이썬 라이브러리 - Pandas (데이터 자료 처리 라이브러리) (1) | 2024.09.27 |
파이썬 라이브러리- NumPy(수치계산라이브러리) (0) | 2024.09.27 |
파이썬 라이브러리 개념 (4) | 2024.09.26 |