Content for Decem's Python course.
1{
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {
6 "slideshow": {
7 "slide_type": "slide"
8 }
9 },
10 "source": [
11 "## 12. Visualización de resultados con Matplotlib"
12 ]
13 },
14 {
15 "cell_type": "markdown",
16 "metadata": {
17 "slideshow": {
18 "slide_type": "slide"
19 }
20 },
21 "source": [
22 "**Matplotlib** es una librería para Python que permite representar y dibujar gráficos en 2D de gran calidad. Se integra con NumPy, pandas y Jupyther\n",
23 "\n",
24 "Es la forma más utilizada de visualizar datos en Python."
25 ]
26 },
27 {
28 "cell_type": "markdown",
29 "metadata": {
30 "slideshow": {
31 "slide_type": "slide"
32 }
33 },
34 "source": [
35 "Se puede instalar en nuestro entorno virtual con el siguiente comando:\n",
36 "\n",
37 "```\n",
38 "pipenv install matplotlib\n",
39 "```"
40 ]
41 },
42 {
43 "cell_type": "markdown",
44 "metadata": {
45 "slideshow": {
46 "slide_type": "slide"
47 }
48 },
49 "source": [
50 "Para usar **Matplotlib** en Jupyter dentro de un notebook, y visualizar las gráficas en el propio navegador, primero tenemos que activar la libreria, con un comando de Jupyter (empieza con `%`):"
51 ]
52 },
53 {
54 "cell_type": "code",
55 "execution_count": null,
56 "metadata": {
57 "slideshow": {
58 "slide_type": "fragment"
59 }
60 },
61 "outputs": [],
62 "source": [
63 "%matplotlib inline"
64 ]
65 },
66 {
67 "cell_type": "markdown",
68 "metadata": {
69 "slideshow": {
70 "slide_type": "slide"
71 }
72 },
73 "source": [
74 "Después de activar Matplotlib en Jupyter, podemos importar la librería para utilizarla:"
75 ]
76 },
77 {
78 "cell_type": "code",
79 "execution_count": null,
80 "metadata": {
81 "slideshow": {
82 "slide_type": "fragment"
83 }
84 },
85 "outputs": [],
86 "source": [
87 "import matplotlib.pyplot as plt"
88 ]
89 },
90 {
91 "cell_type": "markdown",
92 "metadata": {
93 "slideshow": {
94 "slide_type": "fragment"
95 }
96 },
97 "source": [
98 "Se utiliza el alias `plt` como estándar de facto par el uso de **Matplotlib**."
99 ]
100 },
101 {
102 "cell_type": "code",
103 "execution_count": null,
104 "metadata": {
105 "slideshow": {
106 "slide_type": "slide"
107 }
108 },
109 "outputs": [],
110 "source": [
111 "plt.plot(np.random.randn(50).cumsum())"
112 ]
113 },
114 {
115 "cell_type": "markdown",
116 "metadata": {
117 "slideshow": {
118 "slide_type": "slide"
119 }
120 },
121 "source": [
122 "- La librería **Matplotlib** es muy extensa y puede ser compleja, pero se puede entender con una serie de conceptos generales que se utilizan de forma trasversal en toda esta.\n",
123 "\n",
124 "- Dibujar gráficas requiere acciones a diferentes niveles de abstracción, desde \"dibuja los valores de este array bi-dimensional\" a \"cambia el color de este pixel\".\n",
125 "\n",
126 "- Por ello, Matplotlib ofrece una jerarquía de funciones desde las más generales a las más específicas."
127 ]
128 },
129 {
130 "cell_type": "markdown",
131 "metadata": {
132 "slideshow": {
133 "slide_type": "slide"
134 }
135 },
136 "source": [
137 "### Parte esencial de una gráfica: `figure`\n",
138 "\n",
139 "\n"
140 ]
141 },
142 {
143 "cell_type": "markdown",
144 "metadata": {
145 "slideshow": {
146 "slide_type": "slide"
147 }
148 },
149 "source": [
150 "#### Figure\n",
151 "\n",
152 "El objeto `figure` contiene los ejes de coordenadas, títulos, leyendas, y el lienzo donde se va a dibujar. Un objeto `figure` puede tener cualquier número de ejes, pero para ser útil, al menos ha de tener un par.\n"
153 ]
154 },
155 {
156 "cell_type": "code",
157 "execution_count": null,
158 "metadata": {
159 "slideshow": {
160 "slide_type": "fragment"
161 }
162 },
163 "outputs": [],
164 "source": [
165 "fig = plt.figure()\n",
166 "fig.suptitle('figure vacío') \n",
167 "plt.plot()"
168 ]
169 },
170 {
171 "cell_type": "markdown",
172 "metadata": {
173 "slideshow": {
174 "slide_type": "slide"
175 }
176 },
177 "source": [
178 "Cuando usas el comando `plot`, Matplotlib utiliza el último objeto `figure` definido, o lo crea en caso de que no exista ninguno con anterioridad."
179 ]
180 },
181 {
182 "cell_type": "code",
183 "execution_count": null,
184 "metadata": {
185 "slideshow": {
186 "slide_type": "slide"
187 }
188 },
189 "outputs": [],
190 "source": [
191 "fig = plt.figure()\n",
192 "ax1 = fig.add_subplot(2, 2, 1)\n",
193 "plt.plot(np.random.randn(50).cumsum(), 'k--')\n",
194 "ax2 = fig.add_subplot(2, 2, 2)\n",
195 "plt.plot(np.random.randn(50).cumsum(), 'k--')\n",
196 "ax3 = fig.add_subplot(2, 2, 3)\n",
197 "plt.plot(np.random.randn(50).cumsum(), 'k--')"
198 ]
199 },
200 {
201 "cell_type": "code",
202 "execution_count": null,
203 "metadata": {
204 "scrolled": true,
205 "slideshow": {
206 "slide_type": "slide"
207 }
208 },
209 "outputs": [],
210 "source": [
211 "x = np.arange(0, 3 * np.pi, 0.1)\n",
212 "y_sin = np.sin(x)\n",
213 "y_cos = np.cos(x)\n",
214 "\n",
215 "plt.subplot(2, 1, 1)\n",
216 "\n",
217 "plt.plot(x, y_sin)\n",
218 "plt.title('Sine')\n",
219 "\n",
220 "plt.subplot(2, 1, 2)\n",
221 "plt.plot(x, y_cos)\n",
222 "plt.title('Cosine')\n",
223 "\n",
224 "plt.show()"
225 ]
226 },
227 {
228 "cell_type": "markdown",
229 "metadata": {
230 "slideshow": {
231 "slide_type": "slide"
232 }
233 },
234 "source": [
235 "**Matplotlib** también se integra en **pandas**, y se puede usar directamente como un método de un DataFrame."
236 ]
237 },
238 {
239 "cell_type": "code",
240 "execution_count": null,
241 "metadata": {
242 "slideshow": {
243 "slide_type": "slide"
244 }
245 },
246 "outputs": [],
247 "source": [
248 "ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))\n",
249 "ts = ts.cumsum()\n",
250 "ts.plot()"
251 ]
252 },
253 {
254 "cell_type": "code",
255 "execution_count": null,
256 "metadata": {
257 "slideshow": {
258 "slide_type": "slide"
259 }
260 },
261 "outputs": [],
262 "source": [
263 "df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=['A', 'B', 'C', 'D'])\n",
264 "df = df.cumsum()\n",
265 "df.head()"
266 ]
267 },
268 {
269 "cell_type": "code",
270 "execution_count": null,
271 "metadata": {
272 "slideshow": {
273 "slide_type": "slide"
274 }
275 },
276 "outputs": [],
277 "source": [
278 "plt.figure()"
279 ]
280 },
281 {
282 "cell_type": "code",
283 "execution_count": null,
284 "metadata": {
285 "slideshow": {
286 "slide_type": "slide"
287 }
288 },
289 "outputs": [],
290 "source": [
291 "df.plot()"
292 ]
293 },
294 {
295 "cell_type": "code",
296 "execution_count": null,
297 "metadata": {},
298 "outputs": [],
299 "source": []
300 }
301 ],
302 "metadata": {
303 "celltoolbar": "Slideshow",
304 "kernelspec": {
305 "display_name": "Python 3",
306 "language": "python",
307 "name": "python3"
308 },
309 "language_info": {
310 "codemirror_mode": {
311 "name": "ipython",
312 "version": 3
313 },
314 "file_extension": ".py",
315 "mimetype": "text/x-python",
316 "name": "python",
317 "nbconvert_exporter": "python",
318 "pygments_lexer": "ipython3",
319 "version": "3.7.1"
320 }
321 },
322 "nbformat": 4,
323 "nbformat_minor": 2
324}