간단한 그래프 그리기

Jake·2022년 1월 5일
0

Aiffel Fundamental

목록 보기
6/23

1) 막대그래프 그려보기

  1. 데이터 정의
import matplotlib.pyplot as plt
%matplotlib inline

 #그래프 데이터 
subject = ['English', 'Math', 'Korean', 'Science', 'Computer']
points = [40, 90, 50, 60, 100]
  1. 축 그리기
# 축 그리기

fig = plt.figure(figsize=(5,2)) 
# 도화지(그래프) 객체 생성 
# figsize로 인자 값을 주어 그래프 크기를 바꿀 수 있음

ax1 = fig.add_subplot(1,1,1) 
#figure()객체에 add_subplot 메서드를 이용해 축을 그려준다.

matplotlib API 바로가기

  1. 그래프 그리기
# 그래프 그리기
ax1.bar(subject,points)

bar(x,y): 인자에서 정의한 데이터들을 x, y 순으로 넣어 준다.

  1. 그래프 요소 추가
# 라벨, 타이틀 달기
plt.xlabel('Subject')
plt.ylabel('Points')
plt.title("Jake's Test Result")

2) 선 그래프 그려보기

  1. 데이터 정의
    데이터: 과거 아마존 주가
from datetime import datetime
import pandas as pd
import os

# 그래프 데이터 
csv_path = os.getenv("HOME") + "/aiffel/data_visualization/data/AMZN.csv"
data = pd.read_csv(csv_path ,index_col=0, parse_dates=True)
price = data['Close']

# 축 그리기 및 좌표축 설정
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
price.plot(ax=ax, style='black')
plt.ylim([1600,2200])
plt.xlim(['2019-05-01','2020-03-01'])

# 주석달기
important_data = [(datetime(2019, 6, 3), "Low Price"),(datetime(2020, 2, 19), "Peak Price")]
for d, label in important_data:
    ax.annotate(label, xy=(d, price.asof(d)+10), # 주석을 달 좌표(x,y)
                xytext=(d,price.asof(d)+100), # 주석 텍스트가 위차할 좌표(x,y)
                arrowprops=dict(facecolor='red')) # 화살표 추가 및 색 설정

# 그리드, 타이틀 달기
plt.grid()
ax.set_title('StockPrice')

# 보여주기
plt.show()
  • 결과
  1. Pandas Series의 활용
    Pandas의 Series는 선 그래프를 그리기에 최적의 자료구조를 갖추고 있다. 위 예시에서는 price = data['close']가 Series이다.

  2. 주석
    그래프 내에 글자, 화살표 등의 주석을 넣을 때는 annotate() 메서드를 이용한다.

  3. 그리드
    grid()메서드를 이용하면 그리드(격자눈금)을 추가할 수 있다.

3) Plot 사용법 상세

  1. plt.plot()으로 그래프 그리기
    plt.plot()명령으로 그래프를 그리면 matplotlib은 가장 최근의 figure 객체와 그 서브플롯을 그린다.
    서브플롯이 없다면, 새로운 서브플롯을 생성한다.
import numpy as np
x = np.linspace(0, 10, 100) #0에서 10까지 균등한 간격으로  100개의 숫자를 만들라는 뜻입니다.
plt.plot(x, np.sin(x),'o')
plt.plot(x, np.cos(x),'--', color='black') 
plt.show()
  • 결과

서브플롯도 plt.subplot()을 이용해 추가할 수 있다.

x = np.linspace(0, 10, 100) 

plt.subplot(2,1,1)
plt.plot(x, np.sin(x),'orange','o')

plt.subplot(2,1,2)
plt.plot(x, np.cos(x), 'orange') 
plt.show()
  • 결과

  1. linestyle, marker 옵션
    라인 스타일은 plot()의 인자로 들어간다.
x = np.linspace(0, 10, 100) 

plt.plot(x, x + 0, linestyle='solid') 
plt.plot(x, x + 1, linestyle='dashed') 
plt.plot(x, x + 2, linestyle='dashdot') 
plt.plot(x, x + 3, linestyle='dotted')
plt.plot(x, x + 0, '-g') # solid green 
plt.plot(x, x + 1, '--c') # dashed cyan 
plt.plot(x, x + 2, '-.k') # dashdot black 
plt.plot(x, x + 3, ':r'); # dotted red
plt.plot(x, x + 4, linestyle='-') # solid 
plt.plot(x, x + 5, linestyle='--') # dashed 
plt.plot(x, x + 6, linestyle='-.') # dashdot 
plt.plot(x, x + 7, linestyle=':'); # dotted
  • 결과

  1. Pandas로 그래프 그리기
    plot()메서드를 통해 여러 가지 그래프를 그릴 수 있다.
    matplotlib과 연계해 사용하면 좋다.
  • pandas.plot 메서드 인자
    • label: 그래프의 범례 이름.
    • ax: 그래프를 그릴 matplotlib의 서브플롯 객체.
    • style: matplotlib에 전달할 'ko--'같은 스타일의 문자열
    • alpha: 투명도 (0 ~1)
    • kind: 그래프의 종류: line, bar, barh, kde
    • logy: Y축에 대한 로그 스케일
    • use_index: 객체의 색인을 눈금 이름으로 사용할지의 여부
    • rot: 눈금 이름을 로테이션(0 ~ 360)
    • xticks, yticks: x축, y축으로 사용할 값
    • xlim, ylim: x축, y축 한계
    • grid: 축의 그리드 표시할지 여부

  • pandas의 data가 DataFrame 일 때 plot 메서드 인자
    • subplots: 각 DataFrame의 칼럼을 독립된 서브플롯에 그린다.
    • sharex: subplots=True 면 같은 X 축을 공유하고 눈금과 한계를 연결한다.
    • sharey: subplots=True 면 같은 Y 축을 공유한다.
    • figsize: 그래프의 크기, 튜플로 지정
    • title: 그래프의 제목을 문자열로 지정
    • sort_columns: 칼럼을 알파벳 순서로 그린다.
  • 예시
fig, axes = plt.subplots(2, 1)
data = pd.Series(np.random.rand(5), index=list('abcde'))
data.plot(kind='bar', ax=axes[0], color='blue', alpha=0.1)
data.plot(kind='barh', ax=axes[1], color='red', alpha=0.3)
  • 결과

4) 정리

  • 그래프를 그리는 과정 정리

    1. fig = plt.figure(): figure 객체를 선언해 '도화지를 펼쳐' 준다.
    2. ax1 = fig.add_subplot(1,1,1) : 축을 그린다.
    3. ax1.bar(x, y) 축안에 어떤 그래프를 그릴지 메서드를 선택한 다음, 인자로 데이터를 넣어준다.
    4. 그래프 타이틀 축의 레이블 등을 plt의 여러 메서드 grid, xlabel, ylabel 을 이용해서 추가한다.
    5. plt.savefig 메서드를 이용해 저장한다.
  • 각 그래프 요소별 명칭


profile
Nice to meet you. I would really appreciate your feedbacks. Thank you

0개의 댓글