seaborn이란 ?

 


 

Seaborn(발음: 시본)은 파이썬 데이터시각화 라이브러리이며, matplotlib라는 파이썬 시각화툴을 기반으로하고있다. Seaborn은 고수준(high-level) 인터페이스로, 통계적인 그레픽이나 디자인측면에서 손쉽게 구현이 가능하다(여기서 "고수준"은 사용자가 디테일한 수준까지 설정할필요없이, 몇가지 설정으로만 사용할 수 있다는 것이다. 반대어는 저수준으로 디테일한 수준까지 고려할 수 있음을 의미한다). 쉽게얘기하면, 그레프를 조금 더 쉽게 그려주는 페키지이다. 그레프를 통상 관계형, 범주형, 분포, 회귀, 행렬로 나누어서 설명을 한다. Seaborn은 스스로 그래프를 그리는 기능이 있어서 간편하게 사용해볼 수 있다.

 

 

그레프 크기 설정


matplotlib.pyplot.subplots()을 이용하여 서브플롯을 그릴 때, 너무 작은 서브플롯이 그려져서 보이지 않을 수 있다. 이 때는 matplotlib.pyplot.subplots()함수 내에, figsize라는 인자를 전달하면 된다. figsize은 tuple도 가능하고, list도 가능하다. 순서만 맞춰서 전달하면 된다. 가로가 12, 세로가 8인 크기로 만드록 싶으면, [12, 8], 또는 (12, 8) 둘 다 상관없다. 단위는 인치이다.

1
2
3
4
5
6
7
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
 
plt.style.use('ggplot')
fig, ax = plt.subplots(figsize=(5,6))
plt.show()
cs

(참고:https://matplotlib.org/stable/api/figure_api.html?highlight=figsize)

 

 

스타일 지정(seaborn.set_style, seaborn.set, seaborn.set_theme)


 

seaborn에서는 set_style, set, set_theme이라는 함수를 제공한다. 각각의 기능은 다음과 같다.

1. set(context, style, palette, font, font_scale, color_code, rc): set_theme과 동일한 함수이다. 스타일, 팔레트, 글꼴, 글꼴 크기 등을 설정. 이는 앞으로 그리게 되는 모든 플롯의 그림에 영향을 준다. 즉, 환경변수 설정이다. (추후 버전에서 삭제될 얘정이다)

 

2. set_theme(context, style, palette, font, font_scale, color_code, rc): 이 함수를 사용하면 앞으로 그려지는 plot들의 테마들이 일괄적으로 세팅된다. 이 함수를 사용하면 python.matploblib 내의 rcParams system을 변경하게되는데, 이렇게되면 전체적인 플롯들의 테마(글꼴, 팔레트 등)이 일률적으로 변경된다. 파라미터는 다음과 같다. 

Parameter 

- context: string. or dict. 배율조정. 그림 사이즈의 크기가 아니라 그레프의 배율이 커진다.

- style: string. or dict. {None, 'darkgrid', 'white grid', 'dark', 'white', 'ticks'} 중 하나 가 들어간다.

- set(style='darkgrid')라고 해도되지만, 다음에 소개할 set_style('whitegrid')함수를 사용해도 된다. set하나 가지고, 축을 변경할 수도 있지만, set_axis을 이용해도 된다. 

 

3. set_style(style, rc): 은 set_theme과 동일하나 일부 특성만 조작을 할 수 있는 함수이다. "배경색", "배경 내 격자무늬(=그리드)"의 사용여부를 기본으로 사용할 것인지 말것인지에 대한 설정을 할 수 있다.

 

 

- 예제, TimesNewRoman으로 폰트 변경

1
sns.set_style({'font.family':'serif''font.serif':['Times New Roman']})
cs

 

- 예제, background을 흰색으로 변경

1
sns.set_style('whitegrid')
cs

 

 

- 예제, background을 흰색 + ticks(눈금자)를 없애는 스타일

1
sns.set_style('ticks')
cs

 

seaborn.axes_Style(style, rc)

플롯의 미적 스타일에 대한 매개변수를 반환한다. 예를 들어, 내가 사용하고 싶은 스타일이 어떤 파라미터에, 어떤 인자값이 들어있는지 확인하는 용도이다.

1
2
3
4
5
6
7
8
sns.axes_style(style='darkgrid')
#{'figure.facecolor': 'white',
# 'axes.labelcolor': '.15',
# 'xtick.direction': 'out',
# 'ytick.direction': 'out',
# 'xtick.color': '.15',
# 'ytick.color': '.15',
# 'axes.axisbelow': True,....
cs

 

seaborn.set_context(ocntext=None, font_scale, rc=None):

플롯팅 컨텍스트 파라미트. 레이블의 크기, 선에만 영향을주고, 그레프의 전반적인 스타일에 영향을 미치지 않는다. 모든 그림들의 크기를 크리거나

- context: dict. None {paper, notebook, talk, poster}

- font_scale: 폰트 사이즈. 기본값 1.5

 

 

 

컬러 팔레트


데이터에 따라, 알아서 그레프의 색상을 알아서 지정해주고 싶을 때 사용한다.

 

seaboard.set_pallete(palette, n_colors= None)

seaboard.set_pallete('dark',3): 다크 그리드의 색상 3개를 뽑아온다. 보통 색상의 순서는 Blue, green, red, cyan, magenta.. 순서대로 간다. 

1
2
sns.set_palette('deep'5)
sns.scatterplot('petal_length''petal_width', data = iris
cs

 

 

Cubehelix : 프린터기가 흑백인 경우, 일반 컬러를 출력하면, 색상구별이 안되는 경우가 있다. 이를 해결하기 위해서,  색상별로 greyscale을 점점 더 높혀가거나 낮혀가서 할 수 있는 함수이다.

 

 

그레프 그리기


seaborn 함수의 그래프가 그려지는 Axes(marplotlib의 axesSubplot) 객체를 반환하기 떄문에, 서브플롯으로 나눈 축 영역에 그레프를 그릴 수 있다.

 

 

Scatterplot

1
2
import seaborn as sns
sns.scatterplot(x='Sepal.Length', y='Sepal.Width', data=df)
cs

 

- hue: strata을 정할 수 있음.

1
2
import seaborn as sns
sns.scatterplot(x='Sepal.Length', y='Sepal.Width', data=df, hue='Species', style='Species')
cs

 

 

Lineplot

회귀선은 아니고, 데이터들의 평균으로 하는 것 같고, 데이터들의 표준편차 

- markers = True : 점을 다르게 표시할 것인지에 대한 파라미터

- dashes = Fasle : 선을 다르게 표시할 것인지에 대한 파라미터

1
2
import seaborn as sns
sns.lineplot(x='Sepal.Length', y='Sepal.Width', data=df)s')
cs

 

 

Subplots을 이용해서 여러 그레프 그리기

1
2
3
4
5
6
7
x= 'Sepal.Length'
y= 'Sepal.Width'
fig, axes = plt.subplots(ncols=2)
plt.subplots_adjust(wspace=0.3)
sns.scatterplot(x=x, y=y, data=df, ax=axes[0])
sns.lineplot(x=x, y=y, data=df, ax=axes[1])
plt.show()
cs

 

- plt.subplots_adjust(wspace = 0.3) : 컬럼끼리이 그레프를 얼마나 떨어지

 

 

범주형 그레프


stripplot은 변수 하나가 범주형인 산점도, boxplot처럼 x 가 범주형 변수일 때 사용한다. 

1
sns.stripplot(x='Species', y=y, data=df)
cs

 

seaborn.swarmplot: swarmplot도 stripplot과 비슷한데, 어느정도 퍼져있는지를 잘 알아볼 수 있게 가로로 퍼짐형태를 나타내준다.

1
sns.swarmplot(x='Species', y=y, data=df)
cs

 

seaborn.barplot: x는 마찬가지로 범주형이고, strata을 지정할 수 있다. 가는 선은 포인트 추정치인데, 신뢰구간과 유사하다. 

1
2
df = sns.load_dataset("titanic")
sns.barplot(x='sex', y='survived', hue='class', data= df)
cs

 

 

seaborn.countplot: 각 범주 구간의 갯수만 파악

 

1
sns.countplot(x='deck', data=df)
cs

 

seaborn.pointplot 점 추정치 및 신뢰구간을 표시한다. 

 

 

seaborn.boxplot: pointplot의 점추정치가아니라 y가 연속형변수일 때 사용할 수 있는 그레프다. Quantile에 대한 정보 outlier, tail 등에 

대한 정보를 담고 있어 유용하다.

1
sns.boxplot(x='class', y='age', hue='sex', data=df)
cs

 

seaborn.violineplot: boxplot과 커널밀도추정치(KDE, kernel Density Estimation).

히스토그램은 몇개의 구간으로 나누냐에 따라 분포가 달라질 수 있는데, KDE를 이용하여 이를 완만하게 그릴 수 있다.

1
sns.violinplot(x='class', y='age', hue='sex', data=df)
cs

 

분포형 그레프

 

 

pairplot: 쌍관계 그래프를 그림. 데이터를 처음 볼 때, 변수들끼리 어느정도 관련성이 있는지를 산점도로 나타내고 싶을 때 사용한다.

변수가 너무 많아서 그레프가 너무 크면, 사이즈를 무척 크게 그려서, 저장한 다음에 나중에 이미지 뷰어로 보는 것도 추천한다.

1
2
df = sns.load_dataset('iris')
sns.pairplot(df, hue='species', palette='husl')
cs

 

 

 

jointplot: 이변량 그래프와 단변량 그레프를 동시에 볼 수 있는 그레프이다. subplots 영역 안에 그릴 수는 없다. 덧붙여서 그리고 싶으면 jointplot을 객체로 받고, 그 그레프에 다시 그려야한다. 이하 예시를 보자.

1
sns.jointplot(df.sepal_length, df.sepal_width, kind='kde')
cs

 

 

distplot: 단변량분포를 그린다. 커널밀도함수도 같이표현할 수 있다.

1
sns.distplot(df.sepal_length,)
cs

 

 

Regression graph


 

lmplot: Linear model plot의 약어라고 생각되는 플롯이다. 회귀곡선도 그리고, 신뢰구간도 그려준다. 단점은 실제 회귀식은 알수는 없다.

1
sns.lmplot(x='sepal_length', y='sepal_width', hue= 'species', data=df)
cs

 

 

regplot: 두 변수를 이용하여 선형 회귀 모형을 만들고, 그레프로 표현.

1
sns.regplot(x='sepal_length', y='sepal_width', data=df)
cs

 

 

Matrix plot

cluster map: 데이터를 이용해서 계측적으로 군집된 히트맵으로 그림. 몇개의 군집할 것인가를 쉽게 결정할 수 있다. y 축의 계층을 이용해서 군집할 수 있다. 색깔은 근접도를 의미한다. 

1
2
df = df.drop('species', axis=1)
sns.clustermap(df)
cs

 

 

 

heatmap(data, vmin=None, vmax=None, cmap=None, annot=None)

vmin, vmax는 최대 최소값을 지정할수 있는 값 인자이다. cmap은 컬러맵을 의미하며, 아래의 예시와 같이 컬러맵에 대한 내용을 string 또는 리스트로 지정해주면된다. 변수들간의 상관계수를 색으로 인코딩하여 행렬로 표시한다. vmin, vmax=은 최대 최소를 의미한다. 상관계수는 1 annot =True이면 값 안에 숫자를 입력함

1
sns.heatmap(df.corr(), vmin=-1, vmax=1, annot=True, cmap='YlGnBu')
cs

 

 

Seaborn Grid


Seaborn에서 Multi-plot grid로 조건부 관계를 여러가지를 동시에 플롯팅 할 수 있는 것을 의미한다.

FacetGrid, PairGrid, JointGrid 이렇게 세 가지 정도로 나눌 수 있다.

 

FacetGrid(data, row, col, hue) : 다중 플롯 그리드를 만들어서 여러가지 쌍 관계를 표현하기 위한 그리드 Class이다. 도화지에 축을 나누는것과 같다. 

1
2
3
4
5
6
7
import seaborn as sns
sns.set()
iris = sns.load_dataset('iris')
 
= sns.FacetGrid(iris, col='species', hue='species')
g.map(plt.hist, 'sepal_length')
g.set_axis_labels('sepal_length''Count')
cs
 
우선 facetGrid 객체를 만들어야하는데 (=도화지를 나눠야하는데), 나누는 기준을 설정해야한다. 나누는 기준(조건)을 지정해줘야하기때문에
Facetgrid을 "Multi-plot grid for plotting conditional relationships "라고 하는 것 같다. 
  • 5라인: col, hue가 있는데 이는 데이터를 어떤 서브셋으로 나눌건지를 정하는 것이 된다. 즉 컬럼은 붓꽃의 종류로 나누고, 이에 대한 hue(starta)도 붓꽃의  종류로 나누겠다는 것이다. 
  • 6라인: 마든 Facetgrid 객체(g)에 'map' 함수를 이용해서 어떤 그레프를 그릴것인지 명시하고, 변수명을 적는다.
  • 7라인: set_axis_labels(x_var=None, y_var=None). 축에 대한 라벨을 적을 수 있는데, x축을 sepal_length라고 명명하고, y축을 count라고 명명한다는 것이다.

 

 

 

 

PairGrid(data, hue=None, hue_order=None,....) : 쌍(pair) 관계 그레프를 그리기 위한 서브 플롯그리드를 생성

1
2
grid_obj = sns.PairGrid(iris)
grid_obj.map(sns.scatterplot)
cs

 

  • Line 1: PairGird(data, hue=None..). Grid객체를 만드는데 iris 데이터를 이용해서 사용할 것임을 명명
  • Line 2: 만들어진 그리드 객체(grid_obj)에 어떤 그레프를 그릴것인지 map함수를 이용해서 그림.

 

 

JointGird(x, y): 이변량그래프와 단변량 그래프를 함께 나타내기위한 그리드를 생성


1
2
grid_obj = sns.JointGrid(iris.sepal_length, iris.sepal_width)
grid_obj.plot(sns.regplot, sns.distplot)
cs

 

  • Line 1: JointGrid 객체를 만들 것인데, 이에 필요한 데이터를 인자로 넣어 생성, x에 sepal_length , y에 sepal_width을 대입할 것임
  • Line 2: plot(joint_function, marginal_function) 을 할 때, 이변량 그레프는 어떤 것을 그리고, 일변량 그레프는 어떤 것을 그릴것인지 정함. joint_function은 이변량 그레프를 어떤것을 그릴것인지 의미. marginal function은 이변량 그레프 외의 가장자리에 어떤 그레프를 그릴 것인지를 의미

 

 

 

 

map_lower(): 대각선의 아랫쪽에 그레프를 그림

map_upper(): 대각선의 윗쪽 그레프를 그림

 

 

 

 

2019/05/30 - [Data science] - Python 시각화 - 기본

반응형

'Data science > Python' 카테고리의 다른 글

numpy debugging  (0) 2020.02.08
0. Python 이란?: 언어형태, 특징, 메모리관리  (0) 2019.06.16
Python 시각화: 기본  (0) 2019.05.30
3. Numpy 한 페이지 요약  (0) 2019.05.13
2. Python: function  (0) 2019.03.19


파이썬에서 시각화 할 수 있는 여러 패키지들이 있다. 여러가지가 있지만 대표적으로 사용되는 것들은 다음과 같다.

  • Plotnine: ggplot2에 기반한 라이브러리를 이용하여, 표현이 가능하다.
  • Plotly: 대화식 그레프를 그려주는 라이브러리. 시각화를 위해 D3.js을 사용. 이는 자바스크립트를 기반으로한다. D3는 data driven document 을 의미한다. 
  • Folium: 지도데이터의 플롯팅. 지도 API이다. 지도를 화면에 그레프를 그릴 수 있다. 지도 이외에 오버레이를 할 수 있어서, 추가정보를 입힐 수 있다.
  • Pyecharts: 바이두에서 데이터 시각화를 위해 만든 Echarts.js의 파이선 버전이다.
  • Matplotlib: python 2D 플로팅 라이브러리. 플렛폼(운영체제)에 독립적인 대화형 환경을 제공하고, python 스크립트, python 쉘, 노트북, 웹 응용프로그램 서버에서 사용 가능.

이외 웹에서 시각화 할 수 있는 사이트들이 있는데, highcharts.com 에 소스코드를 뿌려줄 수 있다.  위의 종류중 Matplotlib와 Seaborn만 알아도 훌륭하다.



Matplotlib


matplotlib은 파이썬 2D 플로팅 라이브러리로, 플랫폼에 독립적인 대화형 환경을 제공하며, 고품질의 그림을 생성할 수 있게 해준다. 플랫폼에 독립적이지만, 다양한 환경에서 사용할 수 있어, 파이썬 스크립트, 파이썬 및 아이파이썬(IPython) 쉘, 주피터 노트북, 응용웹프로그램 서버에서도 사용이 가능하다.


시각화를 위한 시작은 아래와같다.


1
2
3
4
5
6
7
8
import matplotlib
import matplotlib.pyplot as plt
 
%matplotlib inline
%config inLineBackend.figure_format = 'retina' 고해상도를 그리기 위한 코드
%lsmagic # 매직키워드의 리스트를 보여준다.
 
 
cs

 

[2] pyplot: 플롯을 그려주는 함수들을 가지고있는 서브페키지. 

[4] %matplotlib inline: 객체의 주소값만 출력되는 것을, 한번에 그레프가 그려진다. 

[5] %config inLineBackend.figure_format = 'retina' 고해상도를 그리기 위한 코드 . png, gif, jpeg, retina 속성들이 있다.

[6] %lsmagic: 매직키워드의 리스트를 보여준다.


%은 매직키워드라고 불리는데, 아래와 같이 두 종류가 있다.

  • %: line magic 이 라인에 대한 실행 시간을 보여준다.
  • %%time 10+20:  cell magic. 셀에 대한 실행시간을 보여준다.

Figure 객체
Matplotlib에서 그래프를 그리기 위한 객체. 그레프를 그리기 위한 도화지라고 생각하면 된다. 이 도화지를 plt.subplots()으로 분할해서 각 부분에 그레프를 그리는 방식으로 시각화한다. subplot도 있고, subplots도 있는데, 도화지를 나눠서 그리고 싶다면, 어쨋든 둘다 사용이 가능한데, 사용하는 방법만 다르다.


Subplot(nrows, ncols, index, **kwargs)
분할하기 위한 row, column을 지정해줘야한다. 예를 들어, 위 아래로 분할하고 싶으면, (2 rows, 1 columns, 1번째) . ( 2 rows, 1 columns, 2번째) 로 나눠서 지정하면된다. 화면을 나눠 가면서, 부르는 것을 axis라고 하는데, 나눠가면서 그릴 때 사용하는게 subplot이다.

args에 입력을 다음과 같이하면 된다.
만약 화면을, 2x2로 나누고 싶다면, (2,2,1), (2,2,2), (2,2,3), (2,2,4) 이렇게 나눌 수 있는데, 221,222,223,224이렇게 연달아서 써도 된다. 
위에 1개. 아래에 2개로 표현하고 싶을 때, 221, 223, 224 이렇게 쪼갤 수 있다.
어찌 되었는 이 함수의 리턴값은 Figure 객체와 axes.Axes 객체를 반환한다. 

1
2
3
4
5
6
7
8
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
 
plt.subplot(211); plt.plot(x, np.sin(x))
plt.subplot(223); plt.plot(x, np.cos(x))
plt.subplot(224); plt.plot(x, np.tan(x))
 
cs


plt.show() 을 쓰면 객체 주소가 나오지 않는다.

Subplots(nrow, ncol, sharex=False, Shrey=False, .... fig_kw)
미리 나눠놓고 한번에 그리는 방법. 이 객체 함수 또한 리턴값으로 figure 객체와 axes 객체가 리턴이 된다. Figure 객체는 도화지이기 때문에, 우리는 그림을 그릴 때, 어느 구역에서 그릴지만 지정해주면 된다. 바로 axis[0,0], axis[0,1] 처럼 몇 번째 구역에 그릴 것인지, 바로 직관적으로 그릴 수 있다. 

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
 
fig, axes = plt.subplots(22
axes[00].plot(x, np.sin(x))
axes[01].plot(x, np.cos(x))
plt.show() # 그려주기
 
# 행이나 열이 하나면 차원이 하나만 드f어가야한다.
fig, axes = plt.subplots(12
axes[0].plot(x, np.sin(x)) # 축이 한차원
axes[1].plot(x, np.cos(x)) # 축이 한차원
plt.show() # 그려주기
cs



plot(x, y, data=none, [format])

선 그레프를 그려주는 함수. x, y: data가 따로 분리되어있는 경우, x와 y을 따로 따로 지정해주어야 한다. data가 데이터프레임 형식으로 있다면, x, y에 열 이름을 지정해줘도 된다. format에는 색, 점 라인을 지정할 수 있다.



'ro-': red - 실선을 의미한다.

'cv-.':

'b^:'  파란색, ^삼각형, 

같은 축에 플롯을 그리면, 그레프가 덮어써진다.

'kx--': dash 선을 그릴 수 있다.

점만 표현하고 싶으면 , plot+ 'ro'포맷을 쓰거나, scatterplot을 사용할 수 있다.


참고로 ~~plot의 다른 종류의 함수는 다양하게 표현될 수 있다.




Scatterplot(x, y, s=None, c=None, alpha=None)


matplotlib의 scatter함수는 산점도를 그려준다. s는 scale을 의미하며 각 산점도의 크기를 지정할 수 있고, c는 색상을 의미하고, alpha는 산점도의 투명도를 결정한다.


1
2
3
4
5
6
7
8
9
10
11
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
= 50
= np.random.rand(N)
= np.random.rand(N)
colors = np.random.rand(N)
area = (30* np.random.rand(N))**2
 
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()
cs


s: 산점도의 크기

c, color: 팔레트에서 인덱스를 적용하여 색깔을 입힘. c을 써도되고, color라고 써도된다. 

marker = plot은 format 과 유사하게, {'o', '*' 등}을 사용할 수 있음


예제로, 화면을 분할에서 위의 scatter()을 이용하여, 여러가지(기본, s포함, c까지 포함, alpha까지 포함)를 그리고자 한다면 subplots, subplot을 이용하면 된다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
= 50
= np.random.rand(N)
= np.random.rand(N)
colors = np.random.rand(N)
area = (30* np.random.rand(N))**2
 
fig, axes = plt.subplots(22)
axes[0,0].scatter(x, y)
axes[0,1].scatter(x, y, s=area)
axes[1,0].scatter(x, y, s=area, c= colors)
axes[1,1].scatter(x, y, s=area, c= colors, alpha=0.5)
 
plt.show()
cs


hist()

boxplot()

violinplot()

히스토그램이 bin의 개수에 따라서, 표현이 많이 달라지는데, 커널밀도함수(kernel density funciton)를 표현해서, 데이터의 분포를 분포를 이용하여 완만하게 그려줄 수 있다. 유사하게 바이올린플롯도 kernel density function으로 이용해서, 각 자료의 구간을 완만하게 표현해주는 그레프이다.


text: 텍스트의 왼쪽 하단의 기준점이 2,0에 해당한다는 것이다.

annotate 글씨와 화살표를 같이 표기해준다. 

xy= 화살표의 끝점, xytext = 텍스트가 표기될 왼쪽하단의 기준점. xycoords, textcoords= 데이터를 가지고, 축/길이를 생성, connectionstyle= 화살표의 스타일, 


이 정도 매개변수랑 함수를 사용할정도면, 그만알아보고, 포토샵으로 하자.



축과 눈금 다루기



Ticker 클레스

Artist 클레스: 미적 속성. 이를 Axis(축)와 tick(눈금)이 상속받는데, Axis는 XAxis, YAxis가 상속받고,  Tick은 XTick, YTick을 상속받는다.

set()은 그레프의 제목과 축의 제목, 눈금, 눈금 레이블 등을 한거번에 설정할 수 있다. 그러나 코드의 가독성이 떨어져서, set_xlim 등 따로 따로 함수를 이용해서 구분하여 그림을 그리는게 더 효과적이다.


set_xlim(), set_ylim(), 

set_xticks() 눈금 위치를 리스트 형식으로 지정. 반드시 표현하고 싶은 눈금을 []리스트 내에 지정해준다.  '|'의 위치를 의미한다.

set_xticklabel, set_ytickslabels: 눈금이 지정된 곳에, 레이블을 적는다.


spines: 박스의 경역

grid(True): 그레프 영역내 눈금을 설정할 경우.



bar(): barplot을 그리는 경우

barh(): barplot을 가로로 그린 경우

xvline(): vertical하게 수직선을 그리는 경우


fill():  폐곡선을 그려서 시작점과 

fill(): 0값을 기준으로 가운데를 채워주는 그레프



축의 공유


하나의 그래프를 영역에 두 개 이상의 그래프를 그리면서, 다른 축을 지정하고 싶은 경우 twinx(), twiny()) 함수를 이용해서 새로운 축 객체를 생성하여 그레프를 그리고 추긍ㄹ다르게 지정할 수 있다.

  • twinx() 함수는 x축을 공유하고,  y축을 오른쪽에 표시해주는 새로운 축객체를 반환
  • twiny() 함수는 y축을 공유하고, x축을 위아래오 표시해주는 새로운 축객체를 반환
1
2
3
4
5
6
7
8
fig, axes = plt.subplots()
x= df['Sepal.Length']
y= df['Sepal.Width']
z= df['Petal.Width']
axes.plot(x, y, 'g^:')
 
ax2 = axes.twinx()
ax2.plot(x, z, 'bv--')
cs


1번 라인처럼 fig객체와 axes 객체를 생성해놓고 일단 axes 객체에 그림을 그린다. 그런데 이 axes 객체에 x, y 축이 있을 텐데, 그 축 중 겹치고 싶은 축을 twin해서 사용하는 것이다(7라인)


Legend





Style


plt.style.available 스타일 찾기

plt.style.use('ggplot') ggplot으로 그리기.



Font

windows/fonts으로 들어가서 글꼴이름으로 한글을 지원하는 글꼴이름복하하면 된다.

그 이후, matplotibrc 파일 내에, font.family : 글꼴 이름을 저장한다음 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#
print(matplotlib.matplotlib_fname()) # rc 폴더내에 설정파일 
 
# 또는 아래와 같아 폰트를 직접 지정
import matplotlib.font_manager as fm
font_path = 'path'
font_prop = fm.FontProperties(fname=font_path)
 
plt.style.use('seaborn-paper')
fig, ax1 = plt.subplots()
ax1.plot(x, y1, 'g^:')
ax1.set_xlabel('X data')
ax1.set_ylabel('Y data', fontproperties = font_prop)
ax1.tick_params(color='white')
ax2 = ax1.twinx()
ax2.plot(x, y2, 'r^:')
ax2.set_ylabel('Y2 data')
plt.savefig('foo.png')
cs


Graph save


savefig(fname, dpi) 함수을 이용. fname: 파일명, dpi: dot per inch

1
plt.savefig('foo.png')
cs




PandasDataframe.plot(x=None, y=None)


x, y, kwwds:


kdwds: line, box, bar, bar 그레프에 따라 열

1
2
3
4
5
6
7
8
9
import numpy as np
import pandas as pd
import seaborn as sns
import satsmodels.api as sm
 
# iris = sns.load_dataset('iris'). [7]번 라인과 같다.
iris = sm.datasets.get_rdataset('iris')
iris_df = iris.data 
plt.show()
cs

[8] data라는 속성을 통해서 데이터 형태를 가지고 온다.


플롯에 x에는 꽃잎의 길이, y에는 꽃잎의 넓이를 표시하여, 산점도, 히스토그램, 라인, 그리고 디폴트로 박스플롯을 그리고자하면, plot에 arguments 해당하는 부분을 입력해주면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# scatter plot
iris_df.plot(x='petal_Length', y='Petal.Width', kind='scatter'
 
# histogram
iris_df.plot(x='petal_Length', y='Petal.Width', kind='hist'
 
# linegraph
iris_df.plot(x='petal_Length', y='Petal.Width', kind='line'
 
# Boxplot
iris_df.plot(kind='box'
 
# figsize 변경
iris_df.plot(kind='box', figsize=(3,2)) 
cs




반응형

'Data science > Python' 카테고리의 다른 글

0. Python 이란?: 언어형태, 특징, 메모리관리  (0) 2019.06.16
python 시각화 : Seaborn  (0) 2019.06.10
3. Numpy 한 페이지 요약  (0) 2019.05.13
2. Python: function  (0) 2019.03.19
1. 기본자료형, Python Built-in Code  (0) 2019.03.05

+ Recent posts