Skip to content

Commit 7bfe974

Browse files
committed
Adding MatPlotLib
1 parent f6f831c commit 7bfe974

31 files changed

+682
-9
lines changed

Cheatsheets/img/Annotations_all.png

21.7 KB
Loading

Cheatsheets/img/Annotations_arrow.png

22.7 KB
Loading
10.6 KB
Loading
18.1 KB
Loading

Cheatsheets/img/Annotations_ylim.png

18 KB
Loading

Cheatsheets/img/Figure_1.png

12.8 KB
Loading

Cheatsheets/img/Figure_2.png

28.1 KB
Loading

Cheatsheets/img/Figure_3.png

23.6 KB
Loading

Cheatsheets/img/Figure_4.png

35.5 KB
Loading

Cheatsheets/img/Figure_fruits.png

17.7 KB
Loading

Cheatsheets/img/Figure_fruits_h.png

16.8 KB
Loading
64 KB
Binary file not shown.

Cheatsheets/img/figure.png

15.4 KB
Loading

Cheatsheets/img/img.png

98.3 KB
Loading

Cheatsheets/img/img_1.png

98.3 KB
Loading
4.12 KB
Loading

Cheatsheets/img/sin_cos.png

28.5 KB
Loading

Cheatsheets/img/subplot1.png

8.87 KB
Loading

Cheatsheets/img/subplot2.png

8.1 KB
Loading

Cheatsheets/img/subplot3.png

10.7 KB
Loading

Cheatsheets/img/zoom.png

22.4 KB
Loading

Cheatsheets/matplotlib.md

Lines changed: 420 additions & 0 deletions
Large diffs are not rendered by default.

Cheatsheets/pandas.md

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -266,13 +266,4 @@ df[-500:].plot.line(x='time', y='km')
266266

267267
plt.show()
268268
```
269-
```python
270-
271-
```
272-
```python
273-
274-
```
275-
```python
276-
277-
```
278269

Data/plot.pdf

12.2 KB
Binary file not shown.

Exercises/09.md

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Week 09
2+
Temas vistos en los ejercicios de esta semana:
3+
* Plot
4+
*
5+
6+
## Homework
7+
### Ejercicio 1 - Arbolado
8+
#### Descripcion
9+
Vamos utilizar el archivo 'arbolado-en-espacios-verdes.csv'
10+
1. Realizar un gráfico de puntos que relacione las alturas con los diámetros para las especies (nombre_com) 'Ombú', 'Ceibo' y 'Acacia'. ¿Mantienen todos ellos la misma relación?
11+
2. Para las 10 especies de origen exótico con mayor número de ejemplares estudiar las distribuciones de altura, discriminando por especie en diferentes subplots.
12+
3. Modificar el programa para que guarde el grafico realizado en el punto 1 en un archivo PDF y el del punto 2 en un archivo JPG.
13+
14+
#### What's in here
15+
*
16+
17+
[Solución](./Weeks/Week09/1_arbolado.py)
18+
19+
### Ejercicio 2 - Graficos
20+
#### Descripcion
21+
Modificá el siguiente código para reproducir el gráfico que se muestra. Prestá atención a cómo se numeran los subplots.
22+
23+
![img.png](img/graph_ex2.png)
24+
25+
```python
26+
import matplotlib.pyplot as plt
27+
28+
fig = plt.figure()
29+
plt.subplot(2, 1, 1) # define la figura de arriba
30+
plt.plot([0,1,2],[0,1,0]) # dibuja la curva
31+
plt.xticks([]), plt.yticks([]) # saca las marcas
32+
33+
plt.subplot(2, 2, 3) # define la primera de abajo, que sería la tercera si fuera una grilla regular de 2x2
34+
plt.plot([0,1],[0,1])
35+
plt.xticks([]), plt.yticks([])
36+
37+
plt.subplot(2, 2, 4) # define la segunda de abajo, que sería la cuarta figura si fuera una grilla regular de 2x2
38+
plt.plot([0,1],[1,0])
39+
plt.xticks([]), plt.yticks([])
40+
41+
plt.show()
42+
```
43+
#### What's in here
44+
*
45+
46+
[Solución](./Weeks/Week09/2_graficos.py)
47+
48+
### Ejercicio 3 - Distancias
49+
Teniendo en cuenta las distancias de los planetas al Sol - que son en unidades relativas, la distancia Tierra-Sol es 1 (unidades astronómicas), los periodos de sus órbitas (cuanto tardan en dar la vuelta al Sol, en años) y los nombres de los planetas:
50+
51+
* Plotear los períodos vs las distancias de los planetas como puntos y en una escala doble logarítmica (log X, log Y)
52+
* Escribir el nombre del planeta cerca del punto correspondiente a ese planeta en el plot (puntos adicionales si el texto no se superpone y se lee claro, más puntos adicionales si usan flechas)
53+
* Trazar dos líneas punteadas (una vertical, una horizontal) que se crucen en el punto de la Tierra en el gráfico.
54+
55+
```python
56+
distancias = [0.39, 0.72, 1.00, 1.52, 5.20, 9.54, 19.22, 30.06, 39.48]
57+
58+
periodos = [0.24, 0.62, 1.00, 1.88, 11.86, 29.46, 84.01, 164.8, 248.09]
59+
60+
planetas = ["Mercurio", "Venus", "Tierra", "Marte", "Jupiter", "Saturno",
61+
"Urano", "Neptuno", "Plutón"]
62+
```
63+
64+
65+
#### What's in here
66+
*
67+
[Solución](./Weeks/Week09/3_distancias.py)
68+
69+
### Ejercicio 4 - Clima
70+
#### Descripcion
71+
Bajar los datos de temperaturas globales promedio del aire, de este sitio: https://raw.githubusercontent.com/sbu-python-summer/python-tutorial/master/day-4/nasa-giss.txt
72+
73+
(los datos son de la NASA: https://data.giss.nasa.gov/gistemp/graphs/)
74+
75+
Hay 3 columnas con datos: el año, el cambio de temperatura (No-smoothing = no suavizado), y una representación suavizada del cambio de temperatura (Lowess).
76+
77+
Consigna:
78+
79+
Leer estos datos usando Pandas – ojo que no son csv, ni tsv, son de ancho fijo! Tip: ver pd.read_fwf()
80+
Plotear la representación suavizada del cambio de temperatura como una línea
81+
Plotear los datos de cambio de temperatura como puntos
82+
Colorear los puntos en azul si son negativos (< 0) y rojos si son positivos (>=0).
83+
84+
#### What's in here
85+
*
86+
87+
[Solución](./Weeks/Week09/4_clima.py)
88+

Exercises/Weeks/Week09/1_arbolado.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Vamos utilizar el archivo 'arbolado-en-espacios-verdes.csv'
2+
# 1. Realizar un gráfico de puntos que relacione las alturas con los diámetros para las especies (nombre_com) 'Ombú', 'Ceibo' y 'Acacia'. ¿Mantienen todos ellos la misma relación?
3+
# 2. Para las 10 especies de origen exótico con mayor número de ejemplares estudiar las distribuciones de altura, discriminando por especie en diferentes subplots.
4+
# 3. Modificar el programa para que guarde el grafico realizado en el punto 1 en un archivo PDF y el del punto 2 en un archivo JPG.
5+
6+
import pandas as pd
7+
import matplotlib.pyplot as plt
8+
9+
df = pd.read_csv('../../../Data/arbolado-en-espacios-verdes.csv')
10+
#df.info()
11+
12+
# 1.
13+
# Filtrar los datos por especies 'Ombú', 'Ceibo' y 'Acacia'
14+
especies = ['Ombú', 'Ceibo', 'Acacia'] # Lista de valores deseados
15+
df_especies = df[df['nombre_com'].isin(especies)] # Filtro
16+
17+
18+
plt.figure(figsize=(8, 6))
19+
20+
for especie in especies: # Loop para graficar cada espeie con un color distinto y darle el nombre en la leyenda
21+
df_especie = df_especies[df_especies['nombre_com'] == especie]
22+
plt.scatter(df_especie['altura_tot'], df_especie['diametro'], label=especie)
23+
24+
plt.xlabel('Altura Árbol (m)')
25+
plt.ylabel('Diámetro Árbol (cm)')
26+
plt.title('Alturas vs Diámetros de Árboles por Especie')
27+
plt.legend()
28+
#plt.savefig('alturas_diametros_especies.pdf') # Guardar el gráfico en un archivo PDF
29+
plt.show()
30+
31+
# 2.
32+
# Filtrar por especies de origen exótico
33+
especies_exoticas = df[df['origen'] == 'Exótico']
34+
35+
# Obtener las 10 especies con mayor número de ejemplares
36+
especies_top10 = especies_exoticas['nombre_com'].value_counts().head(10).index.tolist() # el índice de ese output son los nombres
37+
38+
# Crear subplots para cada especie
39+
fig, axes = plt.subplots(nrows=5, ncols=2, figsize=(12, 18)) # en total son 10, por eso 5 rows y 2 cols
40+
axes = axes.flatten()
41+
42+
# Iterar sobre las especies y generar los gráficos en los subplots
43+
for i, especie in enumerate(especies_top10):
44+
ax = axes[i]
45+
datos_especie = especies_exoticas[especies_exoticas['nombre_com'] == especie]
46+
ax.hist(datos_especie['altura_tot'], bins=20, color='skyblue')
47+
ax.set_title(especie)
48+
ax.set_xlabel('Altura (m)')
49+
ax.set_ylabel('Frecuencia')
50+
51+
# Ajustar espacio entre subplots y mostrar el gráfico
52+
plt.tight_layout()
53+
# plt.savefig('grafico_exoticas.jpg', dpi=300) # 3. Guardar el gráfico en un archivo JPG
54+
plt.show()

Exercises/Weeks/Week09/2_graficos.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Modificá el siguiente código para reproducir el gráfico que se muestra. Prestá atención a cómo se numeran los subplots.
2+
3+
import matplotlib.pyplot as plt
4+
5+
fig = plt.figure()
6+
plt.subplot(2, 1, 1) # define la figura de arriba
7+
plt.plot([0,1,2],[0,1,0]) # dibuja la curva
8+
plt.xticks([]), plt.yticks([]) # saca las marcas
9+
10+
plt.subplot(2, 3, 4) # 4 porque seria la cuarta en grilla de 3x3
11+
plt.plot([0,1],[0,1])
12+
plt.xticks([]), plt.yticks([])
13+
14+
plt.subplot(2, 3, 5) # 5 porque sería la quinta en grilla de 3x3
15+
plt.plot([0,1],[0.5,0.5])
16+
plt.xticks([]), plt.yticks([])
17+
18+
plt.subplot(2, 3, 6) # 6 porque sería la sexta en grilla de 3x3
19+
plt.plot([0,1],[1,0])
20+
plt.xticks([]), plt.yticks([])
21+
22+
plt.show()
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Teniendo en cuenta las distancias de los planetas al Sol - que son en unidades relativas, la distancia Tierra-Sol es 1 (unidades astronómicas), los periodos de sus órbitas (cuanto tardan en dar la vuelta al Sol, en años) y los nombres de los planetas:
2+
#
3+
# * Plotear los períodos vs las distancias de los planetas como puntos y en una escala doble logarítmica (log X, log Y)
4+
# * Escribir el nombre del planeta cerca del punto correspondiente a ese planeta en el plot (puntos adicionales si el texto no se superpone y se lee claro, más puntos adicionales si usan flechas)
5+
# * Trazar dos líneas punteadas (una vertical, una horizontal) que se crucen en el punto de la Tierra en el gráfico.
6+
7+
import matplotlib.pyplot as plt
8+
import numpy as np
9+
10+
distancias = np.array([0.39, 0.72, 1.00, 1.52, 5.20, 9.54, 19.22, 30.06, 39.48])
11+
periodos = np.array([0.24, 0.62, 1.00, 1.88, 11.86, 29.46, 84.01, 164.8, 248.09])
12+
planetas = ["Mercurio", "Venus", "Tierra", "Marte", "Jupiter", "Saturno",
13+
"Urano", "Neptuno", "Plutón"]
14+
15+
fig, ax = plt.subplots()
16+
ax.scatter(distancias, periodos, facecolor="olive", edgecolor="grey")
17+
ax.set_xlabel("Distancias relativas a la tierra")
18+
ax.set_ylabel("Periodos (años)")
19+
ax.set_xscale("log")
20+
ax.set_yscale("log")
21+
22+
# agrandamos un poco el rango del eje Y para hacer lugar al texto
23+
ax.set_ylim(1, 1000)
24+
# fijo el rango del eje x
25+
ax.set_xlim(1, 50)
26+
27+
# lineas que se cruzan con eje en la tierra: uso los valores máximos de los ejes para que las líneas atraviesen todo el gráfico
28+
ax.vlines(1, color="grey", ymin=0, ymax=1000, linestyle="dashed", alpha=0.5)
29+
ax.hlines(1, color="grey", xmin=0, xmax=50, linestyle="dashed", alpha=0.5)
30+
31+
# hacemos un loop para agregar anotaciones
32+
for i in range(len(planetas)):
33+
# movemos el texto un poco para que el texto no se superponga
34+
xtext = distancias[i] - (distancias[i] * 0.2) # lo corremos 20% a la izquierda
35+
ytext = periodos[i] + (periodos[i] * 1.2) # lo corremos 120% hacia arriba
36+
# agregamos las anotaciones
37+
ax.annotate(planetas[i], xy=(distancias[i], periodos[i]), xytext=(xtext, ytext),
38+
size=7, arrowprops=dict(shrink=0.2, width=2, headwidth=7, headlength=4, facecolor="tab:purple"))
39+
40+
# anotaciones explicadas con comentarios
41+
# ax.annotate(
42+
# planetas[i], # <=== el texto
43+
# xy=(distancias[i], periodos[i]), # <=== el punto que es el ancla/foco (las coordenadas de los puntos del scatter)
44+
# xytext=(xt,yt), # <=== la posicion del texto
45+
# size=7, # <=== tamaño del texto
46+
# arrowprops=dict(
47+
# shrink=0.05, # <=== achicamos la flecha esta fraccion de la longitud total (de ambos lados)
48+
# width=3, # <=== el ancho de la flecha (en puntos)
49+
# headwidth=7, # <=== el ancho de la cabeza de la flecha (en puntos)
50+
# headlength=4, # <=== la longitud de la cabeza de la flecha (en puntos)
51+
# facecolor="") # retocamos la flecha con este diccionario de propiedades de flecha(arrowprops)
52+
# )
53+
54+
plt.show()

Exercises/Weeks/Week09/4_clima.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Leer estos datos usando Pandas – ojo que no son csv, ni tsv, son de ancho fijo! Tip: ver pd.read_fwf()
2+
# Plotear la representación suavizada del cambio de temperatura como una línea
3+
# Plotear los datos de cambio de temperatura como puntos
4+
# Colorear los puntos en azul si son negativos (< 0) y rojos si son positivos (>=0).
5+
6+
# usando pandas
7+
8+
import pandas as pd
9+
10+
url = 'https://raw.githubusercontent.com/sbu-python-summer/python-tutorial/master/day-4/nasa-giss.txt'
11+
# leemos el archivo directamente con pandas
12+
# fwf = fixed-width format (columnas delimitadas por espaciamiento fijo)
13+
df = pd.read_fwf(url, index_col=0, skiprows=8, header=None) # index_col = 0 hace que tengamos dicha columna como índice
14+
#skip_rows ignora ese número de filas antes de los datos
15+
#header= None evita que use la primera fila de datos como nombres de las columnas
16+
17+
df.rename(columns={1: "Temperatura", 2: "Lowess"}, inplace=True) #renombro las columnas en la misma variable con inplace=True
18+
#print(df.head(5))
19+
#print(len(df.index))
20+
21+
#Generamos dos subconjuntos para luego plotearlos de distintos colores
22+
# temperaturas positivas
23+
pos = df[ df['Temperatura'] >= 0]
24+
# temperaturas negativas
25+
neg = df[ df['Temperatura'] < 0]
26+
27+
import matplotlib.pyplot as plt
28+
29+
fig, ax = plt.subplots()
30+
31+
# ploteamos como puntos las temperaturas no-suavizadas
32+
# positivas en rojo
33+
ax.scatter(pos.index, pos["Temperatura"], color="tab:red")
34+
# negativas en azul
35+
ax.scatter(neg.index, neg["Temperatura"], color="tab:blue")
36+
37+
# ploteamos como linea las temperaturas suavizadas
38+
ax.plot(df.index, df["Lowess"], color="black", linewidth=3)
39+
40+
# agregamos algunas etiquetas para decorar
41+
ax.set_xlabel("Años")
42+
ax.set_ylabel("Cambio de Temperatura (°C)")

Exercises/img/graph_ex2.png

8.15 KB
Loading

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Here is a list of the topics covered in the exercises:
1515
4. [Files management, csv, Functions](./Exercises/05.md)
1616
5. [Numpy, functions](./Exercises/06.md)
1717
7. [Panda](./Exercises/08.md)
18+
8. [Matplotlib, ](./Exercises/09.md)
1819

1920
### Cheatsheets
2021
I've also created a [directory](./Cheatsheets) with cheatsheets that cover the theory I've learned.
@@ -24,6 +25,7 @@ I've also created a [directory](./Cheatsheets) with cheatsheets that cover the t
2425
* [Numpy](./Cheatsheets/numpy.md)
2526
* [Functions](./Cheatsheets/functions.md)
2627
* [Panda](./Cheatsheets/pandas.md)
28+
* [Matplotlib](./Cheatsheets/matplotlib.md)
2729

2830
### Conclusion
2931
Whether you are a beginner just starting out with Python or an experienced programmer looking to improve your skills, these exercises can be a valuable resource to help you practice and deepen your understanding of the language.

0 commit comments

Comments
 (0)