matplotlib
- 라이브러리
# 라이브러리
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# warnings 무시
import warnings
warnings.filterwarnings('ignore')
# 폰트설정
plt.rcParams['font.family'] = 'Malgun Gothic'
plt.rcParams['axes.unicode_minus'] = False
# 그래프 선명
%config InlineBackend.figure_format = 'retina'
=> 이제부터는 위 코드는 항상 실행하고 시작.
- 데이터 준비 (이전 포스팅과 같음 - 변수명만 변경) - 파이썬 시각화 (tistory.com)
air = pd.read_excel('C:\\Users\\User\\Python03\\에어코리아2021_2022\\2022년 2월.xlsx')
# 중구 데이터만
air_jungGu = air[air['측정소명']=='중구']
# 중구 데이터 복사해서 test 데이터프레임 생성
air_jungGu1 = air_jungGu.copy()
# 측정일시 컬럼을 문자열로 변환
air_jungGu1['측정일시'] = air_jungGu1['측정일시'].astype('str')
# 측정일시 컬럼 값 8자리를 추출하여 측정날짜 컬럼으로 생성
air_jungGu1['측정날짜'] = air_jungGu1['측정일시'].str[:8]
# 측정날짜 컬럼을 데이터 타입으로 변환
air_jungGu1['측정날짜'] = pd.to_datetime(air_jungGu1['측정날짜'], format=('%Y-%m-%d'))
# 측정날짜별 대기정보 총합
df = air_jungGu1.groupby('측정날짜', as_index=False)[['SO2', 'CO', 'O3', 'NO2', 'PM25']].sum()
df.head()
- plt.plot(x, y, data)
- x축 : 인덱스
- y축 : 1차원 값
# plt.plot()
plt.figure(figsize=(10,5))
plt.plot('측정날짜', 'PM25', data = df)
plt.show()
- x축 이름, y축 이름, 그래프 제목, x축 값 회전
plt.plot('측정날짜', 'PM25', data = df)
plt.xticks(rotation = 30) # x축 값 꾸미기 : 방향을 30도 틀어서
plt.xlabel('측정날짜') # x축 이름 지정
plt.ylabel('PM25') # y축 이름 지정
plt.title('2022년 2월 PM25', pad=10) # 제목, pad : 그래프와 제목 사이 공간
plt.show()
- 컬러, 라인스타일, 값 모양, 축 범위, 수평선/수직선 추가
plt.figure(figsize=(10,5))
plt.plot('측정날짜', 'PM25', data=df
,color='green' # 칼러
, linestyle='dotted' # 라인스타일
, marker='o') # 값 마커(모양)
plt.ylim(0,2000) # y축 범위 : 0 ~ 2000 (x축 범위 정할 때는 xlim)
plt.xlabel('측정날짜')
plt.ylabel('PM25')
plt.title('2022년 2월 PM25')
max_date = df[df['PM25']==df['PM25'].max()]['측정날짜'] # pm25가 가장 높은 날짜
pm25_mean = df['PM25'].mean() # 2월 pm25 평균 수치
plt.axhline(pm25_mean, color='blue', linestyle='--') # 수평선
plt.axvline(max_date, color='red', linestyle='--') # 수직선
plt.show()
=> plt.plot() 안에 color, linestyle, marker를 입력하여 그래프를 디자인할 수 있다.
=> plt.ylim() 으로 y축 범위 설정 (plt.xlim()은 x축 범위)
=> plt.axhline() : 수평선, plt.axvline() : 수직선 // 원하는 지점에 값을 넣어서 선을 그림
- 여러 그래프 그리기, 범례, 격자
plt.figure(figsize=(10,5))
plt.plot('측정날짜', 'O3', data=df
,color='red' # 칼러
, linestyle='dotted' # 라인스타일
, marker='o') # 값 마커(모양)
plt.plot('측정날짜', 'NO2', data=df
,color='blue' # 칼러
, linestyle='dotted' # 라인스타일
, marker='s') # 값 마커(모양)
plt.xlabel('측정날짜')
plt.ylabel('PM25')
plt.title('2022년 2월 O3와 NO2')
plt.xticks(rotation=45)
plt.legend(loc = 'upper right') # 범례 추가, loc = : 위치
plt.grid() # 격자
plt.show()
=> 시각화 하고 싶은 데이터를 plt.plot()으로 하나 더 만들어주면 함께 그릴 수 있다.
=> legend() : 범례
=> grid() : 격자
- 여러 그래프 나눠 그리기
*** subplot()
plt.subplot(행, 열, 인덱스(순서))
EX__(1행 3열)에 맞춰 그래프 3개 그리기
plt.figure(figsize = (15,5))
plt.subplot(1,3,1) # 1행 3열의 첫번째
plt.plot('측정날짜', 'PM25', data=df)
plt.xticks(rotation = 40)
plt.title('PM25')
plt.grid()
plt.subplot(1,3,2) # 1행 3열의 두번째
plt.plot('측정날짜', 'SO2', data=df)
plt.xticks(rotation = 40)
plt.title('SO2')
plt.grid()
plt.subplot(1,3,3) # 1행 3열의 세번째
plt.plot('측정날짜', 'CO', data=df)
plt.xticks(rotation = 40)
plt.title('CO')
plt.grid()
plt.tight_layout() # 그래프간 간격을 적절히 맞추기
plt.show()
EX__for문 사용하여 (1행 3열)에 맞춰 그래프 3개 그리기
plt.figure(figsize=(15,5))
col = ['PM25','O3','NO2']
for i, v in enumerate(col):
plt.subplot(1,3,i+1)
plt.title(v)
plt.plot('측정날짜', v, data=df)
plt.xticks(rotation=45)
plt.grid()
plt.show()
=> for문을 사용하여 PM25, 03, NO2 그래프 시각화
=> enumerate() : 인덱스와 값을 동시에 접근하기 위한 함수
=> for i, v in enumerate(col) : 리스트 col의 인덱스 0,1,2는 i에 넣고, 값은 v에 넣음
- matplotlib 여러 함수(다른 그래프는 공부 후에 포스팅 예정)
bar : 막대 플롯(bar plot) 생성
barbs : barbs의 2차원 필드 그리기
boxplot : 상자 및 수염 플롯 생성
cohere : x와 y의 일관성 시각화 그리기
contour : 플롯 등고선
errorbar : 오류 막대 그래프
hexbin : 육각형 binning 플롯 생성
hist : 히스토그램 플롯
imshow : 축에 이미지 표시
pcolor : 2차원 배열의 유사 플롯 생성
pcolormesh : 사각 망사 그래프
pie : 파이 차트 플롯
plot : 플롯 라인 또는 마커
quiver : 화살표의 2차원 필드 생성
sankey : Sankey 흐름도 생성
scatter : x대 y의 산점도 생성
stem : 줄기 그래프 생성
streamplot : 벡터 흐름의 스트림 라인 그리기
'Python 파이썬' 카테고리의 다른 글
파이썬 int타입_datetime타입으로 변환 (0) | 2023.03.06 |
---|---|
파이썬 seaborn(1) - 숫자형 변수 (0) | 2023.03.02 |
파이썬 시각화 (1) | 2023.02.27 |
파이썬 데이터프레임 집계 (0) | 2023.02.24 |
파이썬 데이터프레임 - pandas 기초(4-3) (0) | 2023.02.23 |