[Python.MatPlotLib] 그래프 꾸미기 II - 범례(Legend) / X,Y축 Label, 텍스트 및 화살표 / grid / ylim/ savefig
2021. 1. 2. 05:00ㆍPython과 머신러닝/MatPlotLib 데이터 시각화
0. 지난 포스트
- 지난 포스트에서 MatPlotLib 기초와 그래프 꾸미기 1을 정리했다.
- 여기서 사용되는 phone_data.csv를 인터넷에서 다운로드하여 사용하는 코드도 다른 포스트에서 정리하여 함께 남긴다.
- 2020/12/27 - [Python과 머신러닝/Pandas 데이터 분석] - [Python.Pandas] Groupby 실습 / 데이터 분석 (Date/Time 데이터 분석)
- 2020/12/31 - [Python과 머신러닝/데이터 시각화 (MatPlotLib, Seaborn)] - [Python.MatPlotLib] MatPlotLib으로 그래프 그리기, 시각화, subplot/axes, figure
- 2021/01/01 - [Python과 머신러닝/데이터 시각화 (MatPlotLib, Seaborn)] - [Python.MatPlotLib] 그래프 꾸미기 I - 색깔 / 제목 / 선형태 지정하기와 latex 식 표현하기
1. 그래프 꾸미기 1 총정리 + 범례
In [1]:%matplotlib notebook
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
In [2]:df = pd.read_csv("./phone_data.csv")
df.head()
Out[2]:
In [3]:data_result = df[df['item']=='data'].groupby('month')['duration'].sum()
data_result
Out[3]:month
2014-11 998.441
2014-12 1032.870
2015-01 1067.299
2015-02 1067.299
2015-03 998.441
Name: duration, dtype: float64
In [4]:call_result = df[df['item']=='call'].groupby('month')['duration'].sum()
call_result
Out[4]:month
2014-11 25547.0
2014-12 13561.0
2015-01 17070.0
2015-02 14416.0
2015-03 21727.0
Name: duration, dtype: float64
In [5]:fig4 = plt.figure()
plt.plot(call_result.index, call_result, color='g', ls=':', label='call')
plt.plot(data_result.index, data_result, color='r', ls='-', label='data')
plt.legend(shadow=True, fancybox=True, loc="upper left")
- In[5]의 plt.plot까지는 전부 그래프 꾸미기 1에서 다룬 내용이기 때문에 넘어간다.
- 범례를 위해서 하나 달라지는 것이 있다면, plt.plot을 수행할 때 각 plot의 label을 지정해주는 것이다.
- label은 범례에 사용될 이름을 지정하는 parameter이다.
- label='call'
- label='data'
- plt.legend() 함수를 사용하면 범례가 Out[5]와 같이 표현된다.
- shadow=True
- 범례 뒤에 그림자를 그려서 입체감을 표현한다.
- 굳이? 라는 생각이 들었다가 막상 없어보니 좀 심심하다. 기본적으로 True로 설정하는 것이 좋은 것 같다.
- fancybox=True
- '범례 자동 투명화 기능'이라고 표현하는 것이 가장 적합해 보인다.
- MatPlotLib에도 공식적인 설명은 '데이터가 겹쳐질 경우, 자동으로 반투명으로 전환해주는 기능'이라고 정의하고 있는데, fancybox라는 parameter명은 전혀 직관적이 못해서 아쉽다.
- 결론은, 기본적으로 True로 set 하는 것이 좋은 기능인 것 같다.
- loc='upper left'
- 좌측 상단에 범례를 놓으라는 의미이고, upper/lower + left/right를 지정해서 원하는 위치에 지정할 수 있다.
- loc='best'라고 지정할 경우 '알아서 데이터와 겹치지 않도록' 넣어주지만, 그래프의 일관성을 위해 한 곳에 지정되는 것이 좋을 것 같다.
- shadow=True
2. X축 Y축 label 달기
In [7]:plt.xlabel('Month')
plt.ylabel('Duration')
Out[7]:Text(0, 0.5, 'Duration')
- plt.xlabel을 통해 X축의 text를 지정할 수 있다.
- plt.ylabel을 통해 Y축의 text를 지정할 수 있다.
3. 그래프 내에 Text 추가 및 화살표 그리기
In [8]:plt.text('2015-03',23000, 'March')
plt.annotate('Feb', xy=('2015-03',23000), xytext=('2015-02',17000),
arrowprops=dict(facecolor='black', shrink=0.05))
Out[8]:Text(2015-02, 17000, 'Feb')
- plt.text(X,Y,text) 순서로 입력하면, (X,Y) 좌표에 text가 그려진다.
- In[8]의 plt.text('2015-03',23000,'March')는 X='2015-03', Y=23000 위치에 March를 출력하라는 의미이다.
- plt.annotate 함수는 화살표를 그리는 함수이다. 각 Parameter를 차근차근 이해해보자.
- plt.annotate('Feb', xy=('2015-03',23000), xytext=('2015-02',17000),
arrowprops=dict(facecolor='black', shrink=0.05))- 'Feb'이라는 Text를 xytext=('2015-02',17000)에 그리고
- xytext부터 xy=('2015-03', 23000)까지 화살표를 그려라.
- 화살표의 특성은 facecolor='black' (검정색), 크기를 shrink=0.05만큼 줄여라
4. grid 그리기
In [9]:plt.grid(True, lw=0.4, ls='--')
Out[9]:
- plt.grid 함수는 그래프에 x/y축 격자(혹은 눈금선)를 그려주는 함수이다.
- True : grid를 그리라는 것이기 때문에 항상 True를 사용한다. grid를 제거하고 싶을 때 plt.grid(False)를 호출하면 된다.
- lw=0.4 : line width의 약자로 격자의 선 굵기를 지정해줄 수 있다.
- ls='--' : line style이다. 이전 포스트에서 정리했다시피, 격자를 점선으로 표현하라는 의미이다.
5. xlim / ylim
In [10]:plt.ylim(0.5,20000)
Out[10]:(0.5, 20000.0)
- plt.ylim(a,b)는 y에 대한 상한/하한을 직접 지정해 준다. a를 하한선, b를 상한선으로 지정한다.
- 기본적으로 MatPlotLib이 알아서 상한/하한을 지정해주지만, 이걸 따로 지정해주고 싶을 때에는 이와 같이 지정이 가능하다.
- x에 대한 상한/하한을 지정하고 싶을 때에는 plt.xlim(a,b)를 사용할 수 있다.
6. 그래프 png로 저장하기
In [11]:plt.savefig('test.png')
Out[11]:
- plt.savefig 함수를 통해서 현재까지 그려진 그래프를 외부로 저장할 수 있다.
- 위 사진은 test.png를 그대로 붙여 넣은 사진이다.
범례(Legend) / X,Y축 Label, 텍스트 및 화살표 / grid / ylim/ savefig
7. 관련 포스트
- 2021/01/03 - [Python과 머신러닝/MatPlotLib 데이터 시각화] - [Python.MatPlotLib] 그래프 꾸미기 III - 통신 데이터 분석 실습
- 2021/01/04 - [Python과 머신러닝/MatPlotLib 데이터 시각화] - [Python.MatPlotLib] Scatter Plot 실습
- 2021/01/05 - [Python과 머신러닝/MatPlotLib 데이터 시각화] - [Python.MatPlotLib] Histogram과 Box Plot 그리기
- 2021/01/17 - [Python과 머신러닝/MatPlotLib 데이터 시각화] - [Python.MatPlotLib] Boston Housing Price Dataset 종합 실습 (plot, subplot, StandardScaler, boxplot, Correlation Matrix)
'Python과 머신러닝 > MatPlotLib 데이터 시각화' 카테고리의 다른 글
[Python.MatPlotLib] Histogram과 Box Plot 그리기 (0) | 2021.01.05 |
---|---|
[Python.MatPlotLib] Scatter Plot 실습 (0) | 2021.01.04 |
[Python.MatPlotLib] 그래프 꾸미기 III - 통신 데이터 분석 실습 (0) | 2021.01.03 |
[Python.MatPlotLib] 그래프 꾸미기 I - 색깔 / 제목 / 선형태 지정하기와 latex식 표현하기 (0) | 2021.01.01 |
[Python.MatPlotLib] MatPlotLib으로 그래프 그리기, 시각화, subplot/axes, figure (0) | 2020.12.31 |