├── .gitignore ├── README.md ├── data_processing └── README.md ├── etc └── README.md ├── matplotlib ├── 1-1.3_basic_plots.ipynb ├── 1-2.preview.ipynb ├── 1-3. API.ipynb ├── 1-4.Figure_Axes.ipynb ├── 1-5.Color_Stylesheet.ipynb ├── 1-6.Text.ipynb └── README.md └── seaborn └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Python Data Visualization 2 | 3 | Python + 데이터시각화로 할 수 있는 다양한 팁들과 튜토리얼을 만드는 것을 목표로 합니다. 4 | 5 | ## Libraries 6 | 7 | > `use`는 제가 사용해본 라이브러리 체크를 위해 만들었습니다 8 | 9 | ### Static 10 | 11 | 범용적으로 사용하는 정적 데이터 시각화 라이브러리입니다. 12 | 13 | matplotlib의 경우에는 인터랙티브하게 사용할 수 있으나 보통 정적 데이터 시각화에 많이 활용합니다. 14 | 15 | | Name | Description | Documentation | Github | use | 16 | | -------------- | ------------------------------------------ | ------------------------------------------------------ | -------------------------------------------------- | --- | 17 | | **matplotlib** | 가장 기본적이고 범용적인 시각화 라이브러리 | [matplotlib](https://matplotlib.org/) | [github](https://github.com/matplotlib/matplotlib) | O | 18 | | **seaborn** | matplotlib을 베이스로하는 통계 시각화 | [seaborn](http://seaborn.pydata.org/) | [github](https://github.com/mwaskom/seaborn) | O | 19 | | **plotnine** | ggplot2을 사용할 수 있는 라이브러리 | [plotnine](https://plotnine.readthedocs.io/en/stable/) | [github](https://github.com/has2k1/plotnine) | X | 20 | 21 | - [Matplotlib Tutorial](/matplotlib/README.md) 22 | - [Seaborn Tutorial](/matplotlib/README.md) 23 | 24 | ### Interactive 25 | 26 | 인터랙티브 시각화 라이브러리 입니다. 위의 툴들보다 훨씬 다채로운 시각화를 진행할 수 있습니다. 27 | 28 | 이 라이브러리들도 다양한 시각화를 지원합니다. (네트워크, 지도, 등등) 29 | 30 | | Name | Description | Documentation | Github | use | 31 | | ------------- | ----------- | ---------------------------------------- | ------------------------------------------------- | --- | 32 | | **plotly** | | [plotly](https://plot.ly/python/) | [github](https://github.com/plotly/plotly.py) | O | 33 | | **bokeh** | | [bokeh](https://bokeh.org/) | [github](https://github.com/bokeh/bokeh) | O | 34 | | **altair** | | [altair](https://altair-viz.github.io/) | [github](https://github.com/altair-viz/altair) | O | 35 | | **pygal** | | [pygal](http://www.pygal.org/en/stable/) | [github](https://github.com/Kozea/pygal) | X | 36 | | **pyecharts** | | [pyecharts](https://pyecharts.org/) | [github](https://github.com/pyecharts/pyecharts/) | X | 37 | 38 | ### Network 39 | 40 | 관계를 시각화하는 라이브러리 입니다. 41 | 42 | | Name | Description | Documentation | Github | use | 43 | | ----------------- | ----------- | ------------------------------------------------------------ | ------------------------------------------------- | --- | 44 | | **networkx** | | [networkx](https://networkx.github.io/documentation/stable/) | [github](https://github.com/networkx/networkx) | O | 45 | | **python-igraph** | | [python-igraph](https://igraph.org/python/) | [github](https://github.com/igraph/python-igraph) | X | 46 | 47 | ### Geo 48 | 49 | 지도/지리 데이터 시각화 라이브러리입니다. 50 | 51 | | Name | Description | Documentation | Github | use | 52 | | -------------- | -------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | --- | 53 | | **folium** | leaflet.js | [folium](https://python-visualization.github.io/folium/) | [github](https://github.com/python-visualization/folium) | O | 54 | | **geopandas** | | [geopandas](https://geopandas.readthedocs.io/en/latest/) | [github](https://github.com/geopandas/geopandas) | X | 55 | | **googlemaps** | 구글 지도 API | [googlemaps](https://googlemaps.github.io/google-maps-services-python/docs/index.html) | [github](https://github.com/googlemaps/google-maps-services-python) | X | 56 | | **kepler.gl** | Jupyter Widget으로 사용가능 (3D) | [kepler.gl](https://docs.kepler.gl/docs/keplergl-jupyter) | [github](https://github.com/keplergl/kepler.gl/tree/master/bindings/kepler.gl-jupyter) | X | 57 | 58 | ### ETC 59 | 60 | 특수한 목적의 시각화 라이브러리입니다. 이 라이브러리는 Matplotlib을 기반으로 만들어졌습니다. 61 | 62 | | Name | Description | Documentation | Github | use | 63 | | ------------- | ------------- | ------------------------------------------------------ | ---------------------------------------------------- | --- | 64 | | **missingno** | 결측치 | | [github](https://github.com/ResidentMario/missingno) | O | 65 | | **pywaffle** | 와플 차트 | [pywaffle](https://pywaffle.readthedocs.io/en/latest/) | [github](https://github.com/gyli/PyWaffle) | O | 66 | | **wordcloud** | 워드 클라우드 | [wordcloud](https://amueller.github.io/word_cloud/) | [github](https://github.com/amueller/word_cloud) | O | 67 | | **squarify** | 트리맵 | | [github](https://github.com/laserson/squarify) | O | 68 | 69 | - [ETC Tutorial](/etc/README.md) 70 | 71 | ### Interpretable AI 72 | 73 | 머신러닝 모델의 해석을 위해 만들어진 라이브러리입니다. (제 목표이기도 합니다.) 74 | 75 | | Name | Description | Documentation | Github | use | 76 | | ------------ | --------------- | ------------------------------------------------------------- | ------------------------------------------- | --- | 77 | | **SHAP** | Shapley + @ | [SHAP](https://shap.readthedocs.io/en/latest/#) | [github](https://github.com/slundberg/shap) | O | 78 | | **dtreeviz** | 결정트리 시각화 | [dtreeviz](https://explained.ai/decision-tree-viz/index.html) | [github](https://github.com/parrt/dtreeviz) | O | 79 | | **LIME** | | [LIME](https://lime-ml.readthedocs.io/en/latest/lime.html) | [github](https://github.com/marcotcr/lime) | X | 80 | 81 | 82 | ### 데이터를 다루는 라이브러리 83 | 84 | | Name | Description | Documentation | Github | use | 85 | | ---------- | ---------------------------- | ------------------------------------- | -------------------------------------------------- | --- | 86 | | **numpy** | 벡터 및 행렬 연산 라이브러리 | [matplotlib](https://matplotlib.org/) | [github](https://github.com/matplotlib/matplotlib) | O | 87 | | **pandas** | 데이터 분석 라이브러리 | [seaborn](http://seaborn.pydata.org/) | [github](https://github.com/mwaskom/seaborn) | O | 88 | -------------------------------------------------------------------------------- /data_processing/README.md: -------------------------------------------------------------------------------- 1 | # 데이터 처리 라이브러리 2 | 3 | ## Numpy 4 | 5 | ## Pandas -------------------------------------------------------------------------------- /etc/README.md: -------------------------------------------------------------------------------- 1 | # ETC (다양한 특화 라이브러리) 2 | 3 | ### Missingno 4 | 5 | ### PyWaffle 6 | 7 | ### Wordcloud 8 | 9 | - Word Cloud의 기본 요소 10 | - 원하는 모양으로 Word Cloud 만들기 11 | - 원하는 이미지를 배경으로 만들기 12 | 13 | 14 | ### Squarify -------------------------------------------------------------------------------- /matplotlib/1-2.preview.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## 1.2 Matplotlib 미리보기 \n", 8 | "\n", 9 | "앞으로 Matplotlib을 살펴보기전에 가볍게 어떤 요소가 있는지 살펴봅시다.\n", 10 | "\n", 11 | "Matplotlib에서 공식으로 제공하는 Plot입니다.\n", 12 | "\n", 13 | "여기서는 코드를 볼 필요 없습니다. 그림만 보세요 :)\n", 14 | "\n", 15 | "> 한글판 번역 예정" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "data": { 25 | "image/png": "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\n", 26 | "text/plain": [ 27 | "
" 28 | ] 29 | }, 30 | "metadata": { 31 | "needs_background": "light" 32 | }, 33 | "output_type": "display_data" 34 | } 35 | ], 36 | "source": [ 37 | "import numpy as np\n", 38 | "import matplotlib.pyplot as plt\n", 39 | "from matplotlib.ticker import AutoMinorLocator, MultipleLocator, FuncFormatter\n", 40 | "\n", 41 | "np.random.seed(19680801)\n", 42 | "\n", 43 | "X = np.linspace(0.5, 3.5, 100)\n", 44 | "Y1 = 3+np.cos(X)\n", 45 | "Y2 = 1+np.cos(1+X/0.75)/2\n", 46 | "Y3 = np.random.uniform(Y1, Y2, len(X))\n", 47 | "\n", 48 | "fig = plt.figure(figsize=(8, 8))\n", 49 | "ax = fig.add_subplot(1, 1, 1, aspect=1)\n", 50 | "\n", 51 | "\n", 52 | "def minor_tick(x, pos):\n", 53 | " if not x % 1.0:\n", 54 | " return \"\"\n", 55 | " return \"%.2f\" % x\n", 56 | "\n", 57 | "ax.xaxis.set_major_locator(MultipleLocator(1.000))\n", 58 | "ax.xaxis.set_minor_locator(AutoMinorLocator(4))\n", 59 | "ax.yaxis.set_major_locator(MultipleLocator(1.000))\n", 60 | "ax.yaxis.set_minor_locator(AutoMinorLocator(4))\n", 61 | "ax.xaxis.set_minor_formatter(FuncFormatter(minor_tick))\n", 62 | "\n", 63 | "ax.set_xlim(0, 4)\n", 64 | "ax.set_ylim(0, 4)\n", 65 | "\n", 66 | "ax.tick_params(which='major', width=1.0)\n", 67 | "ax.tick_params(which='major', length=10)\n", 68 | "ax.tick_params(which='minor', width=1.0, labelsize=10)\n", 69 | "ax.tick_params(which='minor', length=5, labelsize=10, labelcolor='0.25')\n", 70 | "\n", 71 | "ax.grid(linestyle=\"--\", linewidth=0.5, color='.25', zorder=-10)\n", 72 | "\n", 73 | "ax.plot(X, Y1, c=(0.25, 0.25, 1.00), lw=2, label=\"Blue signal\", zorder=10)\n", 74 | "ax.plot(X, Y2, c=(1.00, 0.25, 0.25), lw=2, label=\"Red signal\")\n", 75 | "ax.plot(X, Y3, linewidth=0,\n", 76 | " marker='o', markerfacecolor='w', markeredgecolor='k')\n", 77 | "\n", 78 | "ax.set_title(\"Anatomy of a figure\", fontsize=20, verticalalignment='bottom')\n", 79 | "ax.set_xlabel(\"X axis label\")\n", 80 | "ax.set_ylabel(\"Y axis label\")\n", 81 | "\n", 82 | "ax.legend()\n", 83 | "\n", 84 | "\n", 85 | "def circle(x, y, radius=0.15):\n", 86 | " from matplotlib.patches import Circle\n", 87 | " from matplotlib.patheffects import withStroke\n", 88 | " circle = Circle((x, y), radius, clip_on=False, zorder=10, linewidth=1,\n", 89 | " edgecolor='black', facecolor=(0, 0, 0, .0125),\n", 90 | " path_effects=[withStroke(linewidth=5, foreground='w')])\n", 91 | " ax.add_artist(circle)\n", 92 | "\n", 93 | "\n", 94 | "def text(x, y, text):\n", 95 | " ax.text(x, y, text, backgroundcolor=\"white\",\n", 96 | " ha='center', va='top', weight='bold', color='blue')\n", 97 | "\n", 98 | "\n", 99 | "# Minor tick\n", 100 | "circle(0.50, -0.10)\n", 101 | "text(0.50, -0.32, \"Minor tick label\")\n", 102 | "\n", 103 | "# Major tick\n", 104 | "circle(-0.03, 4.00)\n", 105 | "text(0.03, 3.80, \"Major tick\")\n", 106 | "\n", 107 | "# Minor tick\n", 108 | "circle(0.00, 3.50)\n", 109 | "text(0.00, 3.30, \"Minor tick\")\n", 110 | "\n", 111 | "# Major tick label\n", 112 | "circle(-0.15, 3.00)\n", 113 | "text(-0.15, 2.80, \"Major tick label\")\n", 114 | "\n", 115 | "# X Label\n", 116 | "circle(1.80, -0.27)\n", 117 | "text(1.80, -0.45, \"X axis label\")\n", 118 | "\n", 119 | "# Y Label\n", 120 | "circle(-0.27, 1.80)\n", 121 | "text(-0.27, 1.6, \"Y axis label\")\n", 122 | "\n", 123 | "# Title\n", 124 | "circle(1.60, 4.13)\n", 125 | "text(1.60, 3.93, \"Title\")\n", 126 | "\n", 127 | "# Blue plot\n", 128 | "circle(1.75, 2.80)\n", 129 | "text(1.75, 2.60, \"Line\\n(line plot)\")\n", 130 | "\n", 131 | "# Red plot\n", 132 | "circle(1.20, 0.60)\n", 133 | "text(1.20, 0.40, \"Line\\n(line plot)\")\n", 134 | "\n", 135 | "# Scatter plot\n", 136 | "circle(3.20, 1.75)\n", 137 | "text(3.20, 1.55, \"Markers\\n(scatter plot)\")\n", 138 | "\n", 139 | "# Grid\n", 140 | "circle(3.00, 3.00)\n", 141 | "text(3.00, 2.80, \"Grid\")\n", 142 | "\n", 143 | "# Legend\n", 144 | "circle(3.70, 3.80)\n", 145 | "text(3.70, 3.60, \"Legend\")\n", 146 | "\n", 147 | "# Axes\n", 148 | "circle(0.5, 0.5)\n", 149 | "text(0.5, 0.3, \"Axes\")\n", 150 | "\n", 151 | "# Figure\n", 152 | "circle(-0.3, 0.65)\n", 153 | "text(-0.3, 0.45, \"Figure\")\n", 154 | "\n", 155 | "color = 'blue'\n", 156 | "ax.annotate('Spines', xy=(4.0, 0.35), xytext=(3.3, 0.5),\n", 157 | " weight='bold', color=color,\n", 158 | " arrowprops=dict(arrowstyle='->',\n", 159 | " connectionstyle=\"arc3\",\n", 160 | " color=color))\n", 161 | "\n", 162 | "ax.annotate('', xy=(3.15, 0.0), xytext=(3.45, 0.45),\n", 163 | " weight='bold', color=color,\n", 164 | " arrowprops=dict(arrowstyle='->',\n", 165 | " connectionstyle=\"arc3\",\n", 166 | " color=color))\n", 167 | "\n", 168 | "ax.text(4.0, -0.4, \"Made with http://matplotlib.org\",\n", 169 | " fontsize=10, ha=\"right\", color='.5')\n", 170 | "\n", 171 | "plt.show()" 172 | ] 173 | }, 174 | { 175 | "cell_type": "markdown", 176 | "metadata": {}, 177 | "source": [ 178 | "앞으로는 다음과 같은 내용에 초점을 두며 살펴볼 예정입니다.\n", 179 | "\n", 180 | "1. **어떤 색을 사용하면 보기 좋을까?**\n", 181 | "\n", 182 | "여기서는 파란색과 빨간색을 사용하여 전체적인 틀에서 가독성을 높였습니다. \n", 183 | "과연 그래프에 담길 정보가 많을 때 어떤 색을 사용하면 더 미적으로 풍부하고 가독성을 높일 수 있는지 살펴봅시다.\n", 184 | "\n", 185 | "2. **어디에 텍스트를 사용할 수 있을까?**\n", 186 | "\n", 187 | "제목, 축 큰 단위, 축 작은 단위, 축 레이블, 범주 등 많은 정보가 있습니다. \n", 188 | "어떤 텍스트를 어디에 추가해야 더 이해하기 쉬울 수 있을지 생각해봅시다.\n", 189 | "\n", 190 | "3. **텍스트 외에는 어떤 정보가 시각화에 도움을 줄 수 있을까?**\n", 191 | "\n", 192 | "현재 텍스트 외에도 그리드(회색 점선)과 텍스트와 함께 사용하는 원, 화살표 등을 이용하여 추가적인 정보를 제공합니다. \n", 193 | "단순히 그래프의 그림과 텍스트 말고도 어떤 내용을 추가할 수 있는지 살펴봅시다.\n", 194 | "\n" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": null, 200 | "metadata": {}, 201 | "outputs": [], 202 | "source": [] 203 | } 204 | ], 205 | "metadata": { 206 | "kernelspec": { 207 | "display_name": "Python 3", 208 | "language": "python", 209 | "name": "python3" 210 | }, 211 | "language_info": { 212 | "codemirror_mode": { 213 | "name": "ipython", 214 | "version": 3 215 | }, 216 | "file_extension": ".py", 217 | "mimetype": "text/x-python", 218 | "name": "python", 219 | "nbconvert_exporter": "python", 220 | "pygments_lexer": "ipython3", 221 | "version": "3.8.0" 222 | } 223 | }, 224 | "nbformat": 4, 225 | "nbformat_minor": 4 226 | } 227 | -------------------------------------------------------------------------------- /matplotlib/1-3. API.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 1장. Matplotlib 입문\n", 8 | "\n", 9 | "## 1-3. API의 이해\n", 10 | "\n", 11 | "Matplotlib은 총 3가지 API를 제공합니다.\n", 12 | "\n", 13 | "**API**란 Application Programing Interface의 약자로, 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻합니다. (출처 : Wikipedia)\n", 14 | "\n", 15 | "좀 더 쉽게 이야기 하면 Matplotlib에서 그래프를 그리는 방식이 3가지 있다는 의미입니다.\n", 16 | "\n", 17 | "1. pyplot API\n", 18 | "2. 객체지향(Object Oriented) API\n", 19 | "3. pylab API\n", 20 | "\n", 21 | "각각을 살펴봅시다." 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 3, 27 | "metadata": {}, 28 | "outputs": [], 29 | "source": [ 30 | "import matplotlib as mpl\n", 31 | "import numpy as np" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "### 1-3-1. pyplot API\n", 39 | "\n", 40 | "`matplotlib.pyplot`은 MATLAB처럼 작동하는 함수들의 모음입니다.\n", 41 | "각 pyplot의 함수들은 plot의 요소를 변경합니다. \n", 42 | "\n", 43 | "반응형(Interactive) Plot이나 간단한 plot을 그릴 때 유용합니다. 앞서 기본적인 plot을 그릴 때 사용한 함수들은 모두 pyplot을 이용하여 그린 그림입니다." 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 9, 49 | "metadata": {}, 50 | "outputs": [ 51 | { 52 | "data": { 53 | "image/png": "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\n", 54 | "text/plain": [ 55 | "
" 56 | ] 57 | }, 58 | "metadata": { 59 | "needs_background": "light" 60 | }, 61 | "output_type": "display_data" 62 | } 63 | ], 64 | "source": [ 65 | "import matplotlib.pyplot as plt\n", 66 | "x = np.array(range(100))\n", 67 | "y = x ** 2 # y=x^2\n", 68 | "plt.plot(x, y)\n", 69 | "plt.show()" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "마지막에 사용한 `plt.show()` 함수는 현재 그리고 있는 plot을 모두 반환하는 함수입니다. \n", 77 | "Notebook 등 Ipython mode에서는 사용하지 않아도 plot을 그려주지만, Ipython mode가 아닌 경우에는 꼭 필요합니다." 78 | ] 79 | }, 80 | { 81 | "cell_type": "markdown", 82 | "metadata": {}, 83 | "source": [ 84 | "### 1-3-2. 객체지향 API\n", 85 | "\n", 86 | "Matplotlib의 Plot과 그 외 요소들은 객체지향입니다.\n", 87 | "\n", 88 | "플롯을 보다 세밀하게 제어하고 사용자 정의 함수를 사용하기 위해서 객체를 직접 다루는 방법을 사용해야 합니다.\n", 89 | "\n", 90 | "`plt.subplots`을 사용하여 1개 이상의 Figure와 1개 이상의 Axes를 직접 다룰 수 있습니다.\n", 91 | "\n", 92 | "개별적인 플롯을 다룰 수 있기에 보다 직관적인 프로그래밍을 할 수 있습니다.\n", 93 | "다른 GUI 툴킷에서 인터랙티브하게 변경하는 등 활용도가 가장 높습니다.\n", 94 | "\n", 95 | "예시를 살펴보겠습니다." 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 11, 101 | "metadata": {}, 102 | "outputs": [ 103 | { 104 | "data": { 105 | "image/png": "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\n", 106 | "text/plain": [ 107 | "
" 108 | ] 109 | }, 110 | "metadata": { 111 | "needs_background": "light" 112 | }, 113 | "output_type": "display_data" 114 | } 115 | ], 116 | "source": [ 117 | "fig, ax = plt.subplots(nrows=1, ncols=1)\n", 118 | "ax.plot(x, y)\n", 119 | "plt.show()" 120 | ] 121 | }, 122 | { 123 | "cell_type": "markdown", 124 | "metadata": {}, 125 | "source": [ 126 | "얼핏보면 pyplot 방식과 거의 똑같은 방식입니다.\n", 127 | "\n", 128 | "여기서는 pyplot 함수 `plt.subplots`를 사용하여 `fig`와 `ax` 라는 plot을 그리는 공간에 대한 객체를 사용할 수 있게 변수로 받습니다.\n", 129 | "\n", 130 | "그리고 `ax`라는 그래프 공간에 직접 x, y를 그리고 최종적으로 plot을 반환합니다.\n", 131 | "\n", 132 | "pyplot 방식과 객체지향 방식 모두 각각의 장점이 있습니다. \n", 133 | "pyplot을 이용하여 객체를 반환하여 사용하니 혼용해서 사용하는 경우가 대다수입니다.\n", 134 | "\n", 135 | "그러니 둘 중에 여러분이 편한 방식을 사용하면 됩니다.\n", 136 | "\n", 137 | "> 앞으로 사용하는 matplotlib 관련 함수는 대부분 객체지향 API를 사용하지만 비교를 위해 같은 기능을 하는 pyplot API들도 소개할 예정입니다." 138 | ] 139 | }, 140 | { 141 | "cell_type": "markdown", 142 | "metadata": {}, 143 | "source": [ 144 | "### 1-3-3. pylab API\n", 145 | "\n", 146 | "pyplot, numpy 등 모든 함수를 전역 네임 스페이스로 가져와서 MATLAB과 유사한 방식으로 시각화를 진행하기 위해 만든 API입니다. 사용은 `matplotlib.pylab`을 이용하여 사용합니다. \n", 147 | "\n", 148 | "절차형 프로세스를 제공합니다. \n", 149 | "\n", 150 | "사용법 자체는 pyplot 방식과 유사합니다. \n", 151 | "하지만 현재는 사용하지 않는 방법이며, 공식 사이트에서도 이 API를 권장하지 않습니다." 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": null, 157 | "metadata": {}, 158 | "outputs": [], 159 | "source": [] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": null, 164 | "metadata": {}, 165 | "outputs": [], 166 | "source": [] 167 | } 168 | ], 169 | "metadata": { 170 | "kernelspec": { 171 | "display_name": "Python 3", 172 | "language": "python", 173 | "name": "python3" 174 | }, 175 | "language_info": { 176 | "codemirror_mode": { 177 | "name": "ipython", 178 | "version": 3 179 | }, 180 | "file_extension": ".py", 181 | "mimetype": "text/x-python", 182 | "name": "python", 183 | "nbconvert_exporter": "python", 184 | "pygments_lexer": "ipython3", 185 | "version": "3.8.0" 186 | } 187 | }, 188 | "nbformat": 4, 189 | "nbformat_minor": 4 190 | } 191 | -------------------------------------------------------------------------------- /matplotlib/1-4.Figure_Axes.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## 1-4. Figure과 Axes\n", 8 | "\n", 9 | "matplotlib를 시작하고 가장 어려운 부분 중 하나는 Figure와 Axes입니다.\n", 10 | "우선 기본적인 문법으로 틀만 출력해보겠습니다." 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 1, 16 | "metadata": {}, 17 | "outputs": [ 18 | { 19 | "data": { 20 | "image/png": "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\n", 21 | "text/plain": [ 22 | "
" 23 | ] 24 | }, 25 | "metadata": { 26 | "needs_background": "light" 27 | }, 28 | "output_type": "display_data" 29 | } 30 | ], 31 | "source": [ 32 | "import numpy as np\n", 33 | "import matplotlib as mpl \n", 34 | "import matplotlib.pyplot as plt\n", 35 | "fig, axes = plt.subplots(1, 1)\n", 36 | "plt.show()" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "`plt.subplots()`라는 함수를 사용해 우리는 2가지 객체를 받을 수 있습니다. \n", 44 | "(`plt.subplots()` 대신 `plt.subplot()` 함수를 사용하면 Axes만 받을 수도 있습니다.)\n", 45 | "\n", 46 | "1. **Figure** : plot의 최상위 레이어\n", 47 | "2. **Axes** : Figure의 일부분\n", 48 | "\n", 49 | "이렇게만 보면 왜 굳이 나누었는지 궁금합니다. \n", 50 | "\n", 51 | "좀 더 디테일하게 살펴봅시다.\n", 52 | "\n", 53 | "- **Figure**는 **subplots, subaxis, subtitiles, legends** 등 plot의 모든 것을 다룹니다.\n", 54 | "- **Axes**는 **x-axis limit, y-axis limit, label, graph 종류** 등 subplot의 모든 것을 다룹니다.\n", 55 | "\n", 56 | "Figure는 나타나는 모든 것을 다루는 반면, Axes는 서브플롯 안에 나타나는 모든 것을 다룬다고 생각하면 됩니다. " 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 2, 62 | "metadata": {}, 63 | "outputs": [ 64 | { 65 | "data": { 66 | "image/png": "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\n", 67 | "text/plain": [ 68 | "
" 69 | ] 70 | }, 71 | "metadata": { 72 | "needs_background": "light" 73 | }, 74 | "output_type": "display_data" 75 | } 76 | ], 77 | "source": [ 78 | "ax = plt.subplot()" 79 | ] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "metadata": {}, 84 | "source": [ 85 | "그래서 똑같은 사각형 2개를 그리더라도 다음과 같이 2가지 방법이 있습니다." 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 3, 91 | "metadata": {}, 92 | "outputs": [ 93 | { 94 | "data": { 95 | "image/png": "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\n", 96 | "text/plain": [ 97 | "
" 98 | ] 99 | }, 100 | "metadata": { 101 | "needs_background": "light" 102 | }, 103 | "output_type": "display_data" 104 | } 105 | ], 106 | "source": [ 107 | "# subplots 사용 (1)\n", 108 | "\n", 109 | "fig, axes = plt.subplots(1, 2) # 1 by 2\n", 110 | "plt.show()" 111 | ] 112 | }, 113 | { 114 | "cell_type": "markdown", 115 | "metadata": {}, 116 | "source": [ 117 | "Python 문법을 조금 활용하여 axes 반환을 개별적으로 받을 수도 있습비다." 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 4, 123 | "metadata": {}, 124 | "outputs": [ 125 | { 126 | "data": { 127 | "image/png": "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\n", 128 | "text/plain": [ 129 | "
" 130 | ] 131 | }, 132 | "metadata": { 133 | "needs_background": "light" 134 | }, 135 | "output_type": "display_data" 136 | } 137 | ], 138 | "source": [ 139 | "# subplots 사용 (2)\n", 140 | "\n", 141 | "fig, (ax1, ax2) = plt.subplots(1, 2) # 1 by 2\n", 142 | "plt.show()" 143 | ] 144 | }, 145 | { 146 | "cell_type": "markdown", 147 | "metadata": {}, 148 | "source": [ 149 | "subplot을 사용하면 1개의 Ax를 반환하니 다음과 같이 할 수 있습니다." 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 5, 155 | "metadata": {}, 156 | "outputs": [ 157 | { 158 | "data": { 159 | "image/png": "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\n", 160 | "text/plain": [ 161 | "
" 162 | ] 163 | }, 164 | "metadata": { 165 | "needs_background": "light" 166 | }, 167 | "output_type": "display_data" 168 | } 169 | ], 170 | "source": [ 171 | "# subplot으로 개별적 그리기\n", 172 | "\n", 173 | "ax1 = plt.subplot(1, 2, 1) # 1 by 2의 1번째\n", 174 | "ax2 = plt.subplot(1, 2, 2) # 1 by 2의 2번째\n", 175 | "plt.show()" 176 | ] 177 | }, 178 | { 179 | "cell_type": "markdown", 180 | "metadata": {}, 181 | "source": [ 182 | "`plt.subplots`은 한번에 동일한 크기의 subplot을 한 번에 그리기 쉽습니다.\n", 183 | "`plt.subplot`은 개별적으로 그려 서로 다른 크기의 subplot을 그릴 수 있다는 장점이 있습니다. \n", 184 | "\n", 185 | "각각의 장점을 이용한 그래프를 그려보겠습니다." 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": 6, 191 | "metadata": {}, 192 | "outputs": [ 193 | { 194 | "data": { 195 | "image/png": "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\n", 196 | "text/plain": [ 197 | "
" 198 | ] 199 | }, 200 | "metadata": { 201 | "needs_background": "light" 202 | }, 203 | "output_type": "display_data" 204 | } 205 | ], 206 | "source": [ 207 | "# subplots로 12개 그리기\n", 208 | "\n", 209 | "fig, axes = plt.subplots(3, 4)\n", 210 | "axes[1][2].plot([1, 2, 3, 4]) # subplots으로 반환한 axes는 배열처럼 접근가능\n", 211 | "axes[2][1].bar([1, 2, 3, 4], [1, 2, 3, 4])\n", 212 | "plt.tight_layout() # subplot간 margin(여백으로 이해하시면 됩니다.)이 겹치지 않게 하는 함수\n", 213 | "plt.show()" 214 | ] 215 | }, 216 | { 217 | "cell_type": "code", 218 | "execution_count": 7, 219 | "metadata": {}, 220 | "outputs": [ 221 | { 222 | "data": { 223 | "image/png": "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\n", 224 | "text/plain": [ 225 | "
" 226 | ] 227 | }, 228 | "metadata": { 229 | "needs_background": "light" 230 | }, 231 | "output_type": "display_data" 232 | } 233 | ], 234 | "source": [ 235 | "# subplot으로 다른 크기 그리기\n", 236 | "\n", 237 | "ax221 = plt.subplot(2, 2, 1)\n", 238 | "ax222 = plt.subplot(2, 2, 2)\n", 239 | "ax212 = plt.subplot(2, 1, 2)\n", 240 | "\n", 241 | "ax221.scatter([1, 2, 3], [3, 2, 1])\n", 242 | "ax212.plot([1,2,3,4,5]) # subplot으로 만든 ax는 각각을 개별적으로 사용할 수 있음\n", 243 | "\n", 244 | "plt.tight_layout()\n", 245 | "plt.show()" 246 | ] 247 | }, 248 | { 249 | "cell_type": "markdown", 250 | "metadata": {}, 251 | "source": [ 252 | "물론 subplot을 여러개 그리는 더 고급진 방법이 있으나 이는 후에 소개하도록 하겠습니다." 253 | ] 254 | }, 255 | { 256 | "cell_type": "markdown", 257 | "metadata": {}, 258 | "source": [ 259 | "그리고 ax를 받으면 이제 이 객체에는 여러 개의 그래프를 함께 그릴 수도 있습니다." 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "execution_count": 16, 265 | "metadata": {}, 266 | "outputs": [ 267 | { 268 | "data": { 269 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAXQ0lEQVR4nO3deXhV5b328e+PMM8CAcMYUVAZFCSgVFurtlZFRWurco4Iigfs0VY7HIue17daezz0bWtnS7EIFBVUwNcBh4NDpRaVJMyzgIEEgwlzCJCQ5Hf+YLeXRSAh2Xs/eyX357r2lb3XHta9MLmvx7XXs5a5OyIiEj2NQgcQEZHaUYGLiESUClxEJKJU4CIiEaUCFxGJqMbJXFmnTp08MzMzmasUEYm83NzcHe6efvTypBZ4ZmYmOTk5yVyliEjkmdmWYy3XLhQRkYhSgYuIRJQKXEQkolTgIiIRpQIXEYkoFbiISERVW+Bm1sPM3jGzNWa22szuiS1/yMy2mdmy2O2qxMcVEZG/q8lx4BXA9919iZm1AXLNbEHsuV+6+88TF09EJHHKKirZe/Awnds0Dx2lVqodgbt7obsvid0vAdYC3RIdTEQkkdydiXNXMvJ3f6Pk0OHQcWrFTuaCDmaWCSwEBgDfA8YC+4AcjozSdx/jPeOB8QA9e/YcsmXLMScUiYh8TubE+aEjxE3epBG1fq+Z5bp71tHLa/wlppm1BuYC97r7PuAPwOnAIKAQ+MWx3ufuU9w9y92z0tM/N5VfRERqqUYFbmZNOFLeT7v7PAB3/9TdK929CngCGJa4mCIicrSaHIViwFRgrbs/9pnlGZ952fXAqvjHExGR46nJUSgXAqOBlWa2LLbsAWCUmQ0CHMgDJiQkoYiIHFO1Be7u7wF2jKdejX8cERGpKc3EFBGJKBW4iEhEqcBFRCJKBS4iElEqcBGRiFKBi4hElApcRCSiVOAiIhGlAhcRiSgVuIhIRKnARUQiSgUuIhJRKnARkYhSgYuIRJQKXEQkolTgIiIRpQIXEYkoFbiISESpwEVEIkoFLiISUSpwEZGIUoGLiESUClxEUtIbq7eHjpDyVOAiknJWFuzl3tnLQsdIeSpwEUkphXsPMm5GNh1aNQ0dJeWpwEUkZZSWVXD79BwOlFcydWxW6DgpTwUuIimhssr5zqylrN++j9/9y2DOOrVt6Egpr3HoACIiAI++upa31hXxyMj+fPnMzqHjRIJG4CIS3MwPtjD1vY8Z+4VMRg/PDB0nMlTgIhLUuxuKeeil1Vx6VmcevLpf6DiRogIXkWA2fFrC3U8voU/n1vxm1GDSGlnoSJGiAheRIIpLyrhtWjbNm6bx5NihtG6mr+ROVrUFbmY9zOwdM1tjZqvN7J7Y8g5mtsDMPor9PCXxcUWkPjh0uJLxM3PYWVrGn27Nomv7FqEjRVJNRuAVwPfdvR9wAXCXmfUDJgJvuXsf4K3YYxGRE6qqcn7w/HKWbt3Dr24axLk92oeOFFnVFri7F7r7ktj9EmAt0A0YCcyIvWwGcF2iQopI/fHLNzfwyopCJl55FlcMyAgdJ9JOah+4mWUCg4EPgS7uXhh7ajvQ5TjvGW9mOWaWU1xcXIeoIhJ1c3ML+O3bG7kxqzsTvtQ7dJzIq3GBm1lrYC5wr7vv++xz7u6AH+t97j7F3bPcPSs9Pb1OYUUkuj7cvJOJ81YwvHdHfnLdQMx0xEld1ajAzawJR8r7aXefF1v8qZllxJ7PAIoSE1FEoi5vRykTnsqlR4eWTL5lCE0b6wC4eKjJUSgGTAXWuvtjn3nqJWBM7P4Y4MX4xxORqNtzoJzbp2djwJNjhtKuZZPQkeqNmhx4eSEwGlhpZn8/Qe8DwCTgOTMbB2wBbkxMRBGJqvKKKr711BLydx/g6TsuILNTq9CR6pVqC9zd3wOOt7PqsvjGEZH6wt35P/9/Je9v3sljN57LsNM6hI5U72hHlIgkxOR3N/NcTgHfufQMvn5e99Bx6iUVuIjE3eurCvnp6+u45tyufPerfUPHqbdU4CISV8vz93Dvs8sY3LM9P/vGOTpcMIFU4CISN9v2HOSOP+fQqXUzpozOonmTtNCR6jWd/ktE4mJ/WQXjpmdzqLySp+84n/Q2zUJHqvdU4CJSZxWVVXz7mSV8VLSfaWOH0rdLm9CRGgTtQhGROvvJ/LW8s76Yh6/tz5f66pQZyaICF5E6mbEoj+mL8hh30WncckGv0HEaFBW4iNTaO+uLePjl1Xzl7M48cNXZoeM0OCpwEamVddv38e1nlnLWqW359c26nmUIKnAROWlFJYcYNz2HVs3SmDo2i1a6nmUQ+lcXkZNysLySf/tzLrtKy3luwnAy2ul6lqGowEWkxqqqnO8/v4wVBXuYfMsQBnZvFzpSg6ZdKCJSY79YsJ5XV27ngSvP5mv9Tw0dp8FTgYtIjTyfk8/v39nEqGE9uOOLp4WOI6jARaQG3t+0kwdeWMmFZ3TkxyMH6ARVKUIFLiIntLl4P3c+lUvPDi15/F+H0CRNtZEq9F9CRI5rd2k542bkkNbImDZ2GO1a6HqWqUQFLiLHVF5RxYSnctm2+yBTRg+hZ8eWoSPJUXQYoYh8jrtz/7yVLP54F7++eRBZmbqeZSrSCFxEPufxv2xi7pIC7v1KH0YO6hY6jhyHClxE/sn8FYX87I31jBzUlXsu6xM6jpyAClxE/mHp1t1877llDOl1Cj+9QdezTHUqcBEBoGD3Af7tzzl0btuMKaOH6HqWEaACFxFKDh1m3PQcyiqqmDZ2KB1b63qWUaCjUEQauIrKKu5+Zikbi/cz47ZhnNFZ17OMCo3ARRowd+ehl1fz7oZifnLdAC7q0yl0JDkJGoGLpLDMifOTtq77563k/nkrE/b5eZNGJOyzGyqNwEVEIkoFLiISUSpwEZGIUoGLiERUtQVuZk+aWZGZrfrMsofMbJuZLYvdrkpsTBEROVpNRuDTgSuOsfyX7j4odns1vrFERKQ61Ra4uy8EdiUhi4iInIS67AO/28xWxHaxnBK3RCIiUiO1LfA/AKcDg4BC4BfHe6GZjTezHDPLKS4uruXqRETkaLUqcHf/1N0r3b0KeAIYdoLXTnH3LHfPSk9Pr21OERE5Sq0K3MwyPvPwemDV8V4rIiKJUe25UMxsFvBloJOZFQA/Ar5sZoMAB/KACQnMKCIix1Btgbv7qGMsnpqALCIichI0E1NEJKJU4CIiEaUCFxGJKBW4iEhEqcBFRCJKBS4iElEqcBGRiFKBi4hElApcJEWVV1SFjiApTgUukoJKyyoYNyM7dAxJcdVOpReR5NpVWs5t07NZWbAndBRJcRqBi6SQbXsO8s3Ji1hbuI/JtwwJHUdSnEbgIiliY1EJo6cuZv+hCmbePozze3cMHUlSnApcJAUs3bqb26Zn07hRI56dMJx+XduGjiQRoAIXCezdDcXcOTOXzm2bMfP28+nZsWXoSBIRKnCRgF5cto3vP7ecvl3aMP32oXRu0zx0JIkQFbhIINP+9jEPv7yG80/rwBNjsmjbvEnoSBIxKnCRJHN3Hluwgd++vZHL+3XhN6MG07xJWuhYEkEqcJEkqqxyHnxxFc98uJWbh/bgJ9cNoHGajuaV2lGBiyRJWUUl985exmurtnPXJafzg8vPxMxCx5IIU4GLJEHJocNMmJnLok07efDqfoy76LTQkaQeUIGLJNiO/WWMnbaYdYUl/OqmQVw3uFvoSFJPqMBFEih/1wFGT/2Q7fsO8cSYLC45s3PoSFKPqMBFEmTd9n3cOnUxZRVVPH3HBQzpdUroSFLPqMBFEiA7bxfjpmfTsmljnr9zOH27tAkdSeohFbhInL255lPuemYJ3U5pwcxx59OtfYvQkaSeUoGLxNGc3AJ+OHcFA7q2Zdptw+jQqmnoSFKPqcBF4mTKwk08+uo6vtinE5NvGUKrZvrzksTSb5hIHbk7k15bxx8XbubqczL4xY3n0qyxpsZL4qnAReqgorKKifNWMie3gFuH9+JH1/QnrZFmV0pyqMBFaunQ4UrufmYJb64t4rtf6ct3LjtDU+MlqVTgIrWw9+Bh7piRTc6W3Txy3QBGX9ArdCRpgFTgIiepaN8hbn1yMZuK9/O7Uecx4pyM0JGkgar2PJZm9qSZFZnZqs8s62BmC8zso9hPTTGTBiFvRyk3TF5E/q4DTBs7TOUtQdXkRMTTgSuOWjYReMvd+wBvxR6L1Gurtu3lG5MXUVpWyazxF3BRn06hI0kDV22Bu/tCYNdRi0cCM2L3ZwDXxTmXSEp5f9NObp7yAc0apzHnzuGc07196EgiNRqBH0sXdy+M3d8OdDneC81svJnlmFlOcXFxLVcnEs7rqwoZ8+RiurZvztxvfYHe6a1DRxIBal/g/+DuDvgJnp/i7lnunpWenl7X1Ykk1azFW/n3p5cwoFtbnpswnFPb6arxkjpqexTKp2aW4e6FZpYBFMUzlEho7s7jf9nEz95YzyVnpvP4vw6hRVPNrpTUUtsR+EvAmNj9McCL8YkjEl5VlfPjV9bwszfWc/3gbky5NUvlLSmp2hG4mc0Cvgx0MrMC4EfAJOA5MxsHbAFuTGRIkWQpr6jiP+Ys58VlnzDuotP4z6vOppGmxkuKqrbA3X3UcZ66LM5ZRII6UF7Bt55awrsbivnhFWdx58W9NTVeUppmYooAu0vLuW16NisK9vDTGwZy09CeoSOJVEsFLg3elp2ljJuRw9ZdB/jDLUP4Wv9TQ0cSqREVuKS8zInzk7auCTNzE/r5eZNGJPTzpWGp83HgIiIShgpcRCSiVOAiIhGlAhcRiSgVuIhIRKnARUQiSgUuIhJRKnARkYhSgYuIRJQKXEQkolTgIiIRpQIXEYkoFbiISESpwEVEIkoFLimtqspDRxBJWSpwSVmbi/dz85QPQscQSVm6oIOknIrKKv703sf8csEGmjXWGEPkePTXISll3fZ9fP0Pi5j02jou7pvOm9+7OHQkkZSlEbikhPKKKn7/zkYe/8tG2jZvwu/+ZTAjBmboqvAiJ6ACl+CW5+/hvjkrWP9pCdcN6sr/vaY/HVo1DR1LJOWpwCWYQ4creWzBBv701810btOcqWOyuOzsLqFjiUSGClyC+HDzTn44dwV5Ow8walgP7r/qbNo2bxI6lkikqMAlqfaXVfDT19Yx84Mt9OjQgmfuOJ8vnNEpdCyRSFKBS9K8u6GYB+at5JO9B7ntwkz+42tn0rKpfgVFakt/PZJwew8c5pH5a5iTW8Dp6a2Yc+dwhvTqEDqWSOSpwCWhXl+1nQdfXMWu0nLuuuR0vn1pH5o3SQsdS6ReUIFLQuzYX8aPXlrN/BWF9Mtoy7SxQxnQrV3oWCL1igpc4srdeXHZJzz88mpKyyr5weV9mXDx6TRJ06RfkXhTgUvcFO49yH++sIq31xUxuGd7/t8N59CnS5vQsUTqrToVuJnlASVAJVDh7lnxCCXR4u7Mzs7n0flrOVxVxYNX92PsFzJJa6Rp8CKJFI8R+CXuviMOnyMRtHXnASbOW8GiTTsZ3rsjk24YSK+OrULHEmkQtAtFaqWyypm+KI+fv7GetEbGo9cPZNSwHjr5lEgS1bXAHfgfM3Pgj+4+5egXmNl4YDxAz54967g6SQUbi0q4b84Klmzdw6Vndea/rh9ARrsWoWOJNDh1LfCL3H2bmXUGFpjZOndf+NkXxEp9CkBWVpaujxVhhyurmLJwM79+8yNaNkvjVzcNYuSgrhp1iwRSpwJ3922xn0Vm9gIwDFh44ndJFK3atpf75qxgTeE+RgzM4KFr+5PeplnoWCINWq0L3MxaAY3cvSR2/3Lgx3FLJinh0OFKfvv2R0x+dzMdWjVl8i1DuGLAqaFjiQh1G4F3AV6I/e9zY+AZd389LqkkJeRu2c19c5azqbiUbwzpzoMj+tGupU75KpIqal3g7r4ZODeOWSRFHCiv4OdvbGDaoo/p2q4FM24fxsV900PHEpGj6DBC+SeLNu5g4ryVbN11gNEX9OKHV55F62b6NRFJRfrLFAD2HTrMf7+6jlmLt5LZsSXPjr+A83t3DB1LRE5ABd7Arf5kL89m5/PC0m2UllUw4Uu9+e5X++qUryIRoAKPiMyJ85Oynj8u3MwfF25O2OfnTRqRsM8WaWh0jk8RkYhSgYuIRJQKXEQkolTgIiIRpQIXEYkoFbiISESpwEVEIkoFHgHrt5eEjiAiKUgTeVJUaVkFr6z4hFmL81mWvyd0HBFJQSrwFOLuLC/Yy+zFW3l5+SeUllfSp3NrHry6H4+8siZ0PBFJMSrwFLDnQDkvLN3Gs9n5rNteQosmaVxzbgY3De3JeT3bY2YqcBH5HBV4IO7O+5t38mx2Pq+t2k55RRXndm/Ho9cP5JpzM2jTXBdOEJETU4EnWdG+Q8xZUsBz2fnk7TxA2+aNGTW0BzcN7Um/rm1DxxORCFGBJ0FFZRULPypm1uJ83l5XRGWVc/5pHbjnK324ckCGTt0qIrWiAk+g/F0HeD4nn+dyCti+7xCdWjflji+exk1ZPeid3jp0PBGJOBV4nJVVVPLmmiJmZ2/lvY07ALi4bzoPXdufy87uTJM0HXovIvGhAo+TjUUlzF6cz7yl29hVWk639i2497K+fDOrO13btwgdT0TqIRV4HRwor2D+ikKezc4nZ8tuGjcyLu/fhZuG9uSiMzqR1shCRxSRekwFXgsrC/YyO3srLy37hJKyCnqnt+KBq87i6+d1p1PrZqHjiUgDoQKvob0HD/PSsm3Mzs5n9Sf7aN6kEVcNzODmoT0ZmnkKZhpti0hyqcBPwN3JztvN7OytvLqykEOHq+iX0ZZHRvbn2kHdaNdCk21EJBwV+DHs2F/GvCUFzM7OZ3NxKW2aNeaG87ozalhPBnRrFzqeiAigAv+HyirnvY07mL14KwvWfEpFlZPV6xT+/ZtncNXAU2nZVP9UIpJa1Eoxf9u4gzFPLqZDq6bcdmEmNw3twRmd24SOJSJyXJEp8MyJ85Oynl2l5Tzx14954q8fJ2wdeZNGJOyzRaTh0LRAEZGIUoGLiESUClxEJKJU4CIiEVWnAjezK8xsvZltNLOJ8QolIiLVq3WBm1ka8HvgSqAfMMrM+sUrmIiInFhdRuDDgI3uvtndy4HZwMj4xBIRkeqYu9fujWbfAK5w9ztij0cD57v73Ue9bjwwPvbwTGB97eMmRSdgR+gQgWjbG66GvP1R2PZe7p5+9MKET+Rx9ynAlESvJ17MLMfds0LnCEHb3jC3HRr29kd52+uyC2Ub0OMzj7vHlomISBLUpcCzgT5mdpqZNQVuBl6KTywREalOrXehuHuFmd0NvAGkAU+6++q4JQsnMrt7EkDb3nA15O2P7LbX+ktMEREJSzMxRUQiSgUuIhJRKnDAzJ40syIzWxU6Swhm1sPM3jGzNWa22szuCZ0pWcysuZktNrPlsW1/OHSmZDOzNDNbamavhM6SbGaWZ2YrzWyZmeWEznOytA8cMLMvAfuBP7v7gNB5ks3MMoAMd19iZm2AXOA6d18TOFrCmZkBrdx9v5k1Ad4D7nH3DwJHSxoz+x6QBbR196tD50kmM8sDstw91SfyHJNG4IC7LwR2hc4RirsXuvuS2P0SYC3QLWyq5PAj9sceNondGsyoxsy6AyOAP4XOIidPBS7/xMwygcHAh2GTJE9sF8IyoAhY4O4NZtuBXwH3AVWhgwTiwP+YWW7stB+RogKXfzCz1sBc4F533xc6T7K4e6W7D+LIbOJhZtYgdqOZ2dVAkbvnhs4S0EXufh5Hzqp6V2x3amSowAWA2P7fucDT7j4vdJ4Q3H0P8A5wRegsSXIhcG1sP/Bs4FIzeypspORy922xn0XACxw5y2pkqMDl71/kTQXWuvtjofMkk5mlm1n72P0WwFeBdWFTJYe73+/u3d09kyOnwnjb3W8JHCtpzKxV7Et7zKwVcDkQqSPRVOCAmc0C3gfONLMCMxsXOlOSXQiM5sgIbFnsdlXoUEmSAbxjZis4cn6fBe7e4A6na6C6AO+Z2XJgMTDf3V8PnOmk6DBCEZGI0ghcRCSiVOAiIhGlAhcRiSgVuIhIRKnARUQiSgUuIhJRKnARkYj6X9CPw6E/4zT3AAAAAElFTkSuQmCC\n", 270 | "text/plain": [ 271 | "
" 272 | ] 273 | }, 274 | "metadata": { 275 | "needs_background": "light" 276 | }, 277 | "output_type": "display_data" 278 | } 279 | ], 280 | "source": [ 281 | "ax = plt.subplot()\n", 282 | "\n", 283 | "x = np.array([1, 2, 3, 4, 5])\n", 284 | "y = x**2\n", 285 | "\n", 286 | "ax.bar(x, y)\n", 287 | "ax.plot(x, y)\n", 288 | "plt.show()" 289 | ] 290 | }, 291 | { 292 | "cell_type": "markdown", 293 | "metadata": {}, 294 | "source": [ 295 | "이렇게 한 plot에는 다양한 종류의 graph를 그려 내용을 추가할 수 있습니다. \n", 296 | "\n", 297 | "하지만 지금처럼 아에 색이 같으면 그래프가 서로 중첩되며 가독성이 떨어집니다. \n", 298 | "이런 상황을 방지하기 위해 색, 투명도 등을 조절할 수 있습니다.\n", 299 | "\n", 300 | "다음 장에서 좀 더 자세하게 다뤄보겠습니다." 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "execution_count": null, 306 | "metadata": {}, 307 | "outputs": [], 308 | "source": [] 309 | } 310 | ], 311 | "metadata": { 312 | "kernelspec": { 313 | "display_name": "Python 3", 314 | "language": "python", 315 | "name": "python3" 316 | }, 317 | "language_info": { 318 | "codemirror_mode": { 319 | "name": "ipython", 320 | "version": 3 321 | }, 322 | "file_extension": ".py", 323 | "mimetype": "text/x-python", 324 | "name": "python", 325 | "nbconvert_exporter": "python", 326 | "pygments_lexer": "ipython3", 327 | "version": "3.8.0" 328 | } 329 | }, 330 | "nbformat": 4, 331 | "nbformat_minor": 4 332 | } 333 | -------------------------------------------------------------------------------- /matplotlib/README.md: -------------------------------------------------------------------------------- 1 | # Matplotlib 2 | 3 | > [Official tutorial](https://matplotlib.org/tutorials/index.html)를 베이스로 만든 내용입니다. 4 | 5 | 각 내용은 jupyter notebook으로 만들 예정입니다. 6 | 7 | 전체적인 내용이 완성되기 전까지는 표현이 살짝 raw 할 수 있습니다. 8 | 9 | - 이 내용을 보기전에 [pandas나 numpy 튜토리얼(TBD)](/data_processing)을 먼저 보면 좋습니다. 10 | - 제목에 link + bold처리는 1차 완료한 내용입니다. 11 | 12 | ## 1. matplotlib와 시각화 이해하기 13 | 14 | - [1-1. 기본적인 plot 3가지](/matplotlib/1-1.3_basic_plots.ipynb) 15 | - [1-2. Matplotlib의 미리보기](/matplotlib/1-2.preview.ipynb) 16 | - [1-3. API의 이해](/matplotlib/1-3.API.ipynb) 17 | - [1-4. Figure와 Axes](/matplotlib/1-4.Figure_Axes.ipynb) 18 | - [1-5. 색과 테마](/matplotlib/1-5.Color_Stylesheet.ipynb) 19 | - [1-6. Text의 종류와 위치](/matplotlib/1-6.Text.ipynb) 20 | - 1-7. numpy와 pandas 21 | 22 | ## 2. matplotlib의 다양한 시각화 방법 23 | 24 | - 2-1. 다양한 plot (1) : hist 25 | - 2-2. 다양한 plot (2) : box plot, violin plot 26 | - 2-3. 다양한 plot (3) : heatmap, countour, colorbar 27 | - 2-4. 다양한 plot (4) : pie chart, polar axis 28 | - 2-5. 다양한 plot (4) : stream plot 29 | - 2-6. 다양한 plot (5) : 3D 30 | 31 | ## 3. 더 좋은 설명을 위한 여러 요소 32 | 33 | - 3-1. Text params 34 | - 3-2. Grid 35 | - 3-3. Axis 36 | - 3-4. Path 37 | 38 | ## 4. 더 이쁜 시각화를 위한 Color 39 | 40 | - 4-1. color 41 | - 4-2. choose colormaps 42 | - 4-3. create colormaps 43 | 44 | ## 5. 완성된 시각화를 위한 정렬 45 | 46 | - 5-1. plot 여러개 그리기 (1) : Gridspecs 47 | - 5-2. plot 여러개 그리기 (2) : Imagegrid 48 | - 5-3. plot안에 plot 그리기 : inset_axes, make_axes_locatable 49 | 50 | ## 6. Settings & Custom 51 | 52 | - 6-1. rcParams 53 | - 6-2. theme 활용 54 | - 6-3. custom theme 55 | 56 | ## 7. Interactive & Animation 57 | 58 | - 7-1. Animation 59 | - 7-2. Interactive 60 | -------------------------------------------------------------------------------- /seaborn/README.md: -------------------------------------------------------------------------------- 1 | # Seaborn 2 | 3 | > API를 기준으로 나눈 목차이며, 각 내용은 공식 사이트를 각색한 내용입니다. 4 | 5 | **Todo** : 적절한 Clustering 필요 6 | 7 | 8 | 9 | ## 용도별 Plot 10 | 11 | ### 1. Relation 12 | 13 | - relplot 14 | - scatterplot 15 | - lineplot 16 | 17 | ### 2. Categorical 18 | 19 | - catplot 20 | - stripplot 21 | - swarmplot 22 | - boxplot 23 | - violinlplot 24 | - boxenplot 25 | - pointplot 26 | - barplot 27 | - countplot 28 | 29 | ### 3. Distribution 30 | 31 | - distplot 32 | - kdeplot 33 | - rugplot 34 | 35 | ### 4. Regression 36 | 37 | - lmplot 38 | - regplot 39 | - residplot 40 | 41 | ### 5. Matrix 42 | 43 | - heatmap 44 | - clustermap 45 | 46 | ## 커스텀을 위한 API 47 | 48 | ### 6. Multiple Plots 49 | 50 | - Facet Grids 51 | - Pair Grids 52 | - Joint Grids 53 | 54 | ### 7. Style --------------------------------------------------------------------------------