No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Subplots

5/18
Recursos

Con subplots se puede trabajar en un arreglo de gráficas a las cuales se accede a través de los índices.

  • Datos
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,5,11)
y = x**2
  • Crear gráfica que sea tipo Fig.
fig, axes = plt.subplots()
axes.plot(x,y)
plt.show()
1.JPG
  • Varias gráficas tipo fig.
fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].plot(x,y,'b')
axes[1].plot(y,x,'r')
plt.show()
2.JPG
  • Acceder a los gráficos mediante el nombre almacenado en una tupla.
fig, (axes1,axes2) = plt.subplots(nrows=1, ncols=2)
axes1.plot(x,y,'b')
axes2.plot(y,x,'r')
plt.show()
3.JPG
  • Generar una matriz de tipo fig, con dos filas y cuatro columnas
fig, axes = plt.subplots(2,4)

#genera un trazo accediendo a las graficas a traves del indice de la matriz
axes[0,0].plot(x,y)
axes[0,1].plot(y,x, 'r')

fig.tight_layout() #mejora la visualización de los ejes de cada gráfico
4.JPG
  • Alternativa para generar una matriz de tipo fig, accediendo a cada gráfica mediante los nombres dados en una tupla
fig, ((axes1, axes2, axes3, axes4), (axes5, axes6, axes7, axes8)) = plt.subplots(2,4)
ax1.plot(x, np.sin(x), 'b')
ax2.plot(y, np.cos(x), 'purple')
ax3.plot(x, np.tan(y), 'orange')
ax4.plot(y, np.cos(y)**2, 'black')

#mejorar la visualización de las figuras
fig.tight_layout()
5.JPG

Reto

  • Grafica la segunda línea de los subplots anteriormente mencionados. Usa el estilo de tu preferencia y compártenos el resultado en la sección de comentarios.

Aportes 41

Preguntas 1

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Resumen de la clase

Subplots

Con subplots se puede trabajar en un arreglo de graficas a las cuales se accede a traves de los indices.

  • Creamos los datos que vamos a utilizar
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,5,11)
y = x**2
  • Crear una grafica que sea de tipo fig
fig, axes = plt.subplots()
axes.plot(x,y,'b')
plt.show()
  • Varias graficas de tipo fig
fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].plot(x,y,'b')
axes[1].plot(y,x,'r')
plt.show()
  • Acceder a los graficos mediante el nombre almacenado en una tupla
fig, (axes1,axes2) = plt.subplots(nrows=1, ncols=2)
axes1.plot(x,y,'b')
axes2.plot(y,x,'r')
plt.show()
  • Generar una matriz de tipo fig, con dos filas y cuatro columnas
fig, axes = plt.subplots(2,4)

#genera un trazo accediendo a las graficas a traves del indice de la matriz
axes[1,0].plot(x,np.cos(x))
axes[1,1].plot(x,np.sin(x), 'r')
axes[1,2].plot(x,np.tan(x), 'green')
axes[1,3].plot(x,np.cos(x)**2)

fig.tight_layout() #mejora la visualizacion de los ejes de cada grafico
  • Alternativa para generar una matriz de tipo fig, accediendo a cada grafica mediante los nombres dados en una tupla
fig, ((axes1, axes2, axes3, axes4), (axes5, axes6, axes7, axes8)) = plt.subplots(2,4)
axes5.plot(x,np.cos(x))
axes6.plot(x,np.sin(x), 'r')
axes7.plot(x,np.tan(x), 'green')
axes8.plot(x,np.cos(x)**2)

#mejorar la visualizacion de las figuras
fig.tight_layout()

Mi reto:


hola a todos
mi reto:

Reto
Le agregué más puntos de muestreo para una gráfica más suave

import matplotlib.pyplot as plt
import numpy as np

x =np.linspace(0.1,11,100)
y = np.sin(x)

fig ,((ax1,ax2,ax3,ax4),(ax5,ax6,ax7,ax8)) = plt.subplots(2,4)
ax1.plot(x,np.cos(x))
ax2.plot(x,np.sin(x),'y')
ax3.plot(x,np.tan(x),'r')
ax4.plot(x,np.cos(x)/x,'m')

#Reto:
ax5.plot(x,np.sinh(x))
ax6.plot(x,np.arcsinh(x),'y:')
ax7.plot(x,np.cosh(x),'r--')
ax8.plot(x,1/np.tanh(x),'m:')
fig.tight_layout()
plt.show()

Aquí una visualización que hice usando plt.subplots(). En ella puede verse la Precipitación Promedio Mensual y la Temperatura Promedio Mensual para Austin y Seattle en un periodo de diez años.

.

.
Comparto también el código que utilicé.

# Create a Figure and an array of subplots with 2 rows and 2 columns
fig, ax = plt.subplots(2, 2)

# Addressing the top left Axes, plot the Seattle precipitation
ax[0,0].plot(seattle_weather['DATE'].unique(), seattle_weather.groupby('DATE')['MLY-PRCP-NORMAL'].mean(), color='b', marker='o', linestyle='--')

# In the top right, plot Seattle temperatures
ax[0,1].plot(seattle_weather['DATE'].unique(), seattle_weather.groupby('DATE')['MLY-TAVG-NORMAL'].mean(), color='b', marker='o', linestyle='--')

# In the bottom left and bottom right plot Austin precipitations and temperatures
ax[1,0].plot(austin_weather['DATE'].unique(), austin_weather.groupby('DATE')['MLY-PRCP-NORMAL'].mean(), color='r', marker='v', linestyle='--')
ax[1,1].plot(austin_weather['DATE'].unique(), austin_weather.groupby('DATE')['MLY-TAVG-NORMAL'].mean(), color='r', marker='v', linestyle='--')

# Set the x-axis tick labels
ax[0,0].set_xticklabels([])
ax[0,1].set_xticklabels([])
ax[1,0].set_xticks(seattle_weather['DATE'].unique())
ax[1,0].set_xticklabels(MONTH, rotation=90)
ax[1,1].set_xticks(seattle_weather['DATE'].unique())
ax[1,1].set_xticklabels(MONTH, rotation=90)

fig.suptitle('Weather patterns in Austin and Seattle')
plt.show()

Mi reto

fig, ((ax1,ax2,ax3,ax4),(ax5,ax6,ax7,ax8)) = plt.subplots(2,4)
ax1.plot(x,np.cos(x))
ax2.plot(x,np.sin(x),'r')
ax3.plot(x,np.tan(x),'y')
ax4.plot(x,np.cos(x)**2)

ax5.plot(x,np.cos(x)**(-1),color=('#8B008B'))
ax6.plot(x,np.sin(x)**(-1),color=('#F08080'))
ax7.plot(x,np.tan(x)**(-1),color=('chocolate'))
ax8.plot(x,np.cos(x)**3,color=('magenta'))

fig.tight_layout()

Mi reto :

Mi reto del curso


<h5>Reto</h5>
#Importacion de librerias:
import matplotlib.pyplot as plt
import numpy as np
from math import e
# Forma 1 Desestructuracion con tuplas ():
# fig, [[ax1, ax2, ax3, ax4], [ax5, ax6, ax7, ax8]] = plt.subplots(2, 4)
# Forma 2 Desestructuracion con Arrays []:
fig, ((ax1, ax2, ax3, ax4), (ax5, ax6, ax7, ax8)) = plt.subplots(2, 4)
# Primera Fila
ax1.plot(x,np.cos(x),'r') # Funcion coseno
ax2.plot(x,np.sin(x),'y') # Función seno
ax3.plot(x, np.tan(x),'g') # Función tangente
ax4.plot(x,x**2,'b') # Funcion Cuadrática
# Segunda fila
ax5.plot(x,np.cosh(x),'rD-') # Función coseno hiperbólico
ax6.plot(x,np.power(e, x),'ys-') # Función exponencial
ax7.plot(x, np.sign(x),'g.-') #Función signo
ax8.plot(x,np.sqrt(x),'^b') # Función raiz cuadrada
# Para generar espacios de separación entre axes o gráficas.
fig.tight_layout()
#Para eliminar la descripción y mostrar únicamente la figuras o las gráficas
plt.show()

Reto
Si alguien sabe como quitar las líneas entre el código y los plots, le agradezco me avise cómo

Hola, les comparto por acá el reto
Por cierto, descubrí como se visualiza en la imagen que colocando el nombre completo del color también podemos colorear la línea e incluso evitar confusiones con las formas. (Como colocar “o” que nos daría círculos, pero no el color orange)

Desafío:

# Con el segundo metodo que vimos para definir los axes sería así: 

fig, ((ax1, ax2, ax3, ax4), (ax5, ax6, ax7, ax8)) = plt.subplots(2, 4) 
ax1.plot(x,y, 'bo-') # Defino el primer subplot / Cuando tenía una sola fila no tenía que especificar fila y columna del subplot. Ahora si debo hacerlo
ax2.plot(y,x, 'rx--') # Defino el segundo subplot
ax3.plot(x,np.cos(x))
ax4.plot(x,np.sin(x))
ax5.plot(x,np.tan(x))
ax6.plot(y,np.cos(y))
ax7.plot(y,np.sin(y))
ax8.plot(y,np.tan(y))
fig.tight_layout() # Presenta los graficos con espacio suficiente para apreciarlos
fig.show()

Que bien explicado está Matplotlib en este curso! Un lujo de curso y un lujo de docente.

Hola, este es mi reto, son las gráficas de las funciones inversas de seno, coseno, tangente y seno hiperbólico

fig, axes = plt.subplots(nrows=2,ncols=4)
axes[0,0].plot(x1,np.sin(x1),'b')
axes[0,1].plot(x1,np.cos(x1),'r')
axes[0,2].plot(x1,np.tan(x1),'green')
axes[0,3].plot(x1,np.sin(x1)**2,'y')

axes[1,0].plot(x1,np.arcsin(x1),'orange',linestyle=":")
axes[1,1].plot(x1,np.arccos(x1),'^g')
axes[1,2].plot(x1,np.arctan(x1),'r',linestyle="--")
axes[1,3].plot(x1,np.sinh(x1),'y',linestyle="-.")
fig.tight_layout()

RETO:

fig, ((ax1,ax2,ax3,ax4),(ax5,ax6,ax7,ax8)) = plt.subplots(2,4)
ax1.plot(x, np.sin(x), 'b')
ax2.plot(y, np.cos(x), 'purple')
ax3.plot(x, np.tan(y), 'orange')
ax4.plot(y, np.cos(y)**2, 'black')

ax5.plot(x, y)
ax6.plot(y,np.tan(x)**2, 'y')
ax7.plot(y,y*(-2), 'r:')
ax8.plot(x+y, np.sin(y-x)*(-4))

fig.tight_layout()

👾😄

fig, axes = plt.subplots(2, 2)#no siempre es necesario especificar nrows y ncols
axes[0,0].plot(x, y, 'y')
axes[1,0].plot(x, sinx, 'b')
axes[0,1].plot(sinx, y, 'g')
axes[1,1].plot(z, sinx, 'r')
fig.show()

Reto: incluye compartimentación de 2 gráficos y reducción de gráfico.

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(ncols=4, nrows=2)
gs = axes[1,2].get_gridspec()

# remuevo y comparto subplots 
for ax in axes[1,:-2]:
    ax.remove()
axes_1x2 = fig.add_subplot(gs[1, :-2])

# para generar las funciones vistas en clase  
x = np.linspace(0,5,11)

# funcion agregar grafico [1,2] y [1,3]
def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)
t1 = np.arange(0.0, 3.0, 0.01)

# funciones para grafico 1x2 compartido [1,:-2]
a = b = np.arange(0, 3, .02)
c = np.exp(a)
d = c[::-1]

# genero los graficos 
axes[0,0].plot(x,np.cos(x))# ubicación de gráficos 
axes[0,1].plot(x,np.sin(x),'y')
axes[0,2].plot(x,np.tan(x),'r')
axes[0,3].plot(x,np.cos(x)**2)

axes_1x2.plot(a, c, 'r--')
axes_1x2.plot(a, d, 'y:')
axes_1x2.plot(a, c + d, 'k')

axes[1,2].plot(t1, f(t1), 'v:')

axes[1,3].margins(1, 1)  # zoom out (defalult 0.5)        
axes[1,3].plot(t1, f(t1), 'g')
axes[1,3].set_title('Zoomed out')

fig.tight_layout()
plt.show()


FUENTE
https://matplotlib.org/3.1.1/tutorials/intermediate/gridspec.html
https://matplotlib.org/3.5.0/gallery/subplots_axes_and_figures/gridspec_and_subplots.html#sphx-glr-gallery-subplots-axes-and-figures-gridspec-and-subplots-py

fig, ((axs01,axs02,axs03,axs04),(axs05,axs06,axs07,axs08)) = plt.subplots(2,4)
axs01.plot(x,np.cos(x))
axs02.plot(x,np.sin(x),"r")
axs03.plot(x,np.tan(x),"y")
axs04.plot(x,np.cos(x**2),"g")

axs05.plot(x,np.cos(z),"g")
axs06.plot(x,np.sin(z),"y")
axs07.plot(x,np.tan(z),"y")
axs08.plot(x,np.cos(z**2))

fig.tight_layout() #funcion para separa las graficas

Otra maravillosa clase

Reto:

Mi Reto

Mi reto

fig, Ax = plt.subplots(nrows=2, ncols=4, figsize=(15,10))
Ax[0,0].plot(y,x,'black', marker = 'd')
Ax[0,1].plot(x,y,'g>:')
Ax[0,2].plot(x,np.tan(x),'rv-')
Ax[0,3].plot(x,np.cos(x),'yX-')
for c in range(0,4):
    Ax[1,c].plot(x,x**(c+1),'bD--')
fig.tight_layout() # Adjust the padding between and around subplots.

![](

Reto:

Reto Completado

Para los que quieran cambiar el tamaño del lienzo:

plt.rcParams["figure.figsize"] = (10, 7)

Reto cumplido

Mi reto 😃

Jugando un poquito con numpy para las gráficas del reto 😁

fig, axes = plt.subplots(2, 4) #Two rows and four columns
axes[0,0].plot(x,np.cos(x)) #first row and first colum
axes[0,1].plot(x,np.sin(x),'y') # first row, second column
axes[0,2].plot(x,np.tan(x),'r') # first row, third column
axes[0,3].plot(x,np.cos(x)**2, 'g') # first row, fourth column
#Second row
axes[1,0].plot(x,np.tan(x)**2, 'g')
axes[1,1].plot(x,np.arctan(x)**2, 'p')
axes[1,2].plot(x,(x)**2, 'c')
axes[1,3].plot(x,np.pi*x, 'black')
fig.tight_layout()    # To avoid overlaping

Mi solución al reto

# Figure y Axes
fig, ((ax1, ax2, ax3, ax4), (ax5, ax6, ax7, ax8)) = plt.subplots(nrows=2, ncols=4, figsize=(12, 8))

# Plotting
ax1.plot(x, np.sin(x), 'b-o')
ax1.set_title('Seno')
ax1.grid()

ax2.plot(x, np.cos(x), 'y-x')
ax2.set_title('Coseno')
ax2.grid()

ax3.plot(x, np.tan(x), 'r-*')
ax3.set_title('Tangente')
ax3.grid()

ax4.plot(x, np.tanh(x), 'm:o')
ax4.set_title('Tangente Hiperbólica')
ax4.grid()

ax5.plot(x, np.arcsin(x), 'g--x')
ax5.set_title('Arcoseno')
ax5.grid()

ax6.plot(x, np.arccos(x), 'p:')
ax6.set_title('Arcocoseno')
ax6.grid()

ax7.plot(x, np.arctan(x), 'b-d')
ax7.set_title('Arcotangente')
ax7.grid()

ax8.plot(x, np.cosh(x), '^-k')
ax8.set_title('Coseno Hiperbólico')
ax8.grid()

# Visualization
fig.tight_layout()

reto cumplido

El reto kappa

Les comparto mis apuntes en el código del curso, con explicaciones y notas

Mi aporte!!

De esta forma también se puede hacer el reto, salu2.

fig, ((ax1,ax2,ax3,ax4),(ax5,ax6,ax7,ax8)) = plt.subplots(nrows=2, ncols=4)
ax1.plot(x,np.cos(x))
ax2.plot(x,np.sin(x),'y')
ax3.plot(x,np.tan(x),'r')
ax4.plot(x,np.cos(x)**2)

ax5.plot(x,x**0.5,'bD--')
ax6.plot(x,x/0.5,'ro:')
ax7.plot(x,np.tan(np.sin(x)),'yx')
ax8.plot(x,np.sin(x**5)**2)
fig.tight_layout()