본문 바로가기

Python 파이썬

파이썬 matplotlib(1) - 숫자형 변수

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 : 벡터 흐름의 스트림 라인 그리기