[Visualization] Python Visualization 1
Python Visualization
준비
클라우드 환경에서는 시각화 라이브러리가 기본적으로 제공되어 있다. 아래 코드를 통해 설치여부를 확인할 수 있다.
$ pip list | grep matplotlib
$ pip list | grep seaborn
혹시 설치가 되어 있지 않다면 아래 명령어를 사용해 설치도 가능하다.
$ pip install matplotlib
$ pip install seaborn
막대그래프
1. 데이터 정의
import matplotlib.pyplot as plt
%matplotlib inline
#그래프 데이터
subject = ['English', 'Math', 'Korean', 'Science', 'Computer']
points = [40, 90, 50, 60, 100]
%matplotlib inline은 IPython에서 사용하는 매직 메소드이다. IPython 매직 명령어 정리
2. 축그리기
# 축 그리기
fig = plt.figure() #도화지(그래프) 객체 생성
ax1 = fig.add_subplot(1,1,1) #figure()객체에 add_subplot 메소드를 이용해 축 그리기
만약 fig = plt.figure()
만 입력하면, <Figure size 432x288 with 0 Axes>
로 객체만 생성된다. figure()
는 도화지로 괄호 안에 figsize = ()
를 넣어 도화지의 크기를 지정할 수 있다. add_subplot
메소드를 통해 축을 그릴 수 있다.
fig = plt.figure(figsize=(5,2))
ax1 = fig.add_subplot(1,1,1)
add_subplot(행, 열, 인덱스 순서)
메소드를 통해 도화지안에 여러개의 그래프 축을 만들 수 있다.
fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,4)
3. 그래프 그리기
막대그래프는 bar
메소드로 쉽게 그릴 수 있다.
# 그래프 데이터
subject = ['English', 'Math', 'Korean', 'Science', 'Computer']
points = [40, 90, 50, 60, 100]
# 축 그리기
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
# 그래프 그리기
ax1.bar(subject,points)
<BarContainer object of 5 artists>
4. 그래프 요소 추가
label, title
x라벨, y라벨, 제목을 추가하기 위해서는 xlabel()
메소드와 ylabel()
메소드 title()
메소드를 이용한다.
plt.xlabel('Subject')
plt.ylabel('Points')
plt.title("Yuna's Test Result")
# 그래프 데이터
subject = ['English', 'Math', 'Korean', 'Science', 'Computer']
points = [40, 90, 50, 60, 100]
# 축 그리기
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
# 그래프 그리기
ax1.bar(subject, points)
# 라벨, 타이틀 달기
plt.xlabel('Subject')
plt.ylabel('Points')
plt.title("Yuna's Test Result")
Text(0.5, 1.0, "Yuna's Test Result")
선 그래프
1. 데이터 정의
과거 아마존 주가 데이터를 이용해 선 그래프를 그려보자.
from datetime import datetime
import pandas as pd
import os
#그래프 데이터
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()
plot 사용하기
plt.plot()
명령으로 그래프를 그리면 matplotlib은 가장 최근의 figure객체와 그 서브플롯을 그리고 서프플롯이 없다면 하나 생성한다.
np.linspace(0, 10, 100)
을 통해 0에서 10까지 균등한 간격으로 100개의 숫자를 만들어 그래프를 그려보자.
plt.plot()
의 인자로 x데이터, y데이터, 마커옵션, 색상 등의 인자를 이용할 있다.
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()
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
Pandas로 그래프 그리기
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
: 축의 그리드 표시할 지 여부
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=1)
data.plot(kind='barh', ax=axes[1], color='red', alpha=0.3)
<AxesSubplot:>
df = pd.DataFrame(np.random.rand(6,4), columns=pd.Index(['A','B','C','D']))
df.plot(kind='line')
<AxesSubplot:>
정리
-
fig = plt.figure()
: figure 객체를 선언해 도화지 펼치기 -
ax1 = fig.add_subplot(1,1,1)
: 축을 그리기 -
ax1.bar(x, y)
축안에 어떤 그래프를 그릴지 메소드를 선택한 다음, 인자로 데이터를 넣기 -
그래프 타이틀 축의 레이블 등을 plt의 여러 메소드
grid
,xlabel
,ylabel
을 이용해서 추가하기 -
plt.savefig
메소드를 이용해 저장
댓글남기기