Anatomía de una Figura:
Índice de la página:
Descripción.
Código.
-------------------------------------------------------------------------------
DESCRIPCIÓN:Toda la explicación de este Notebook está en los videos del 02 al 13 del curso de MatPlotLib, se encuentran en la carpeta E:\CURSOS\Trading Inteligente\PYTHON\Visualización de Datos en Python-Matplotlib\VIDEOS\.
El Notebook está: C:\Users\USER\Dropbox\PYTHON\CURSOS\MatPlotLib\Anatomia de Figura.ipynb
Cada separación con almohadillas y guiones es una celda del Notebook, si no existe esta separación es una línea en blanco del propio código.
-------------------------------------------------------------------------------------
CÓDIGO:
PRIMEROS PASOS:
import matplotlib.pyplot as plt # Paquete general de matplotlib
%matplotlib inline # Esto es para que los gráficos se muestren todos dentro de la interfaz de Jupyter
# --------------------------------------------------------------- #
import matplotlib as mpl
plt.style.use('default') # Restaura el style por defecto a Matplotlib original.
mpl.rcParams.update(mpl.rcParamsDefault) # Resetea Matplotlib al estado original por defecto
x = [1,2,3,4,5] # Creo una lista con 5 valores y la asigno a x
y = [15,41,23,58,45] # Y otra lista para y
plt.scatter(x,y) # gráfica de dispersión
plt.show() # muestra el gráfico con todo lo incluido y quita texto que sale arriba del gráfico.
# --------------------------------------------------------------- #
import numpy as np
np.random.seed(123)
x = np.arange(0,100,1) # Cramos una secuencia que empieza en 0 y va hasta 99 el paso es de uno en uno
y = np.random.randint(0,10,100) + x # genero valores aleatorios enteros
plt.plot(x,y) # gráfica de lineas
plt.title('LÍNEAS') # título
plt.xlabel('Tiempo') # etiquetas del eje X
plt.ylabel('Y') # etiquetas del eje Y
plt.show()
# --------------------------------------------------------------- #
plt.style.available # Todos los Estilos disponibles
# --------------------------------------------------------------- #
plt.style.use('grayscale') # Utilizo el estilo 'grayscale'
z = np.random.normal(0, 1, 100) # probiene de la distribución normal
plt.plot(x, z)
plt.title('Nuevo Estilo')
plt.show()
# --------------------------------------------------------------- #
import matplotlib as mpl # Esta importación es para poder resetear Matplotlib
mpl.rcParams.update(mpl.rcParamsDefault) # Resetea Matplotlib al estado original por defecto
plt.style.use('seaborn-bright') # carga el estilo 'seaborn-bright'
plt.plot(x, z)
plt.show()
# --------------------------------------------------------------- #
Anatomía de una Figura:
El código que viene es muy importante para nuestro desarrollo como analistas de datos! La visualización de los datos es siempre el primer paso, y hacerlo de forma rápida y eficiente nos hará la vida más fácil...por eso es importante entender el siguiente código: Son las bases de la visualización de datos en Python!
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, AutoMinorLocator, FuncFormatter # este módulo es para los ticks
from matplotlib.patches import Circle # módulo para crear circulos dentro de una gráfica
mpl.rcParams.update(mpl.rcParamsDefault) # Resetea Matplotlib al estado original por defecto
np.random.seed(123) #semilla para los numeros aleatorios
#creo 4 variables! (ojo están en mayúsculas)
X = np.linspace(0.5,3.5,100)
Y1 = 3+np.cos(X)
Y2 = 1+np.cos(1+X/0.75)/2
Y3 = np.random.uniform(Y1,Y2,len(X))
# Creo dos objetos, una figura y un ax, ax es lo que va dentro de la figura y podría haber
# varios si fuéramos ha hacer varios gráficos dentro de la figura
fig, ax = plt.subplots(figsize = (8,8)) # También le doy medida al gráfico en pulgadas.
#cambiando los multiplos de los ticks
ax.xaxis.set_major_locator(MultipleLocator(1)) # Tick Mayores Va de cero a 1 en el eje x
ax.xaxis.set_minor_locator(AutoMinorLocator(4)) # Tick Menores queremos 4 ticks menores entre cada tick mayor en el eje x
ax.yaxis.set_major_locator(MultipleLocator(1)) # Tick Mayores Va de cero a 1 en el eje y
ax.yaxis.set_minor_locator(AutoMinorLocator(4)) # Tick Menores queremos 4 ticks menores entre cada tick mayor en el eje y
ax.set(xlim = [0,4], ylim = [0,4]) # Límite de los ejes van de 0 a 4 los 2 ejes
#cambiando las medidas de las marcas (líneas) de los ticks para que se vean más en el gráfico.
ax.tick_params(which = 'major', width = 1.0, length = 10) # Ponemos a 10 la medida de los ejes mayores
ax.tick_params(which = 'minor', width = 1.0, length = 5) # Ponemos a 5 la medida de los ejes menores
# Cuadrícula (ponemos líneas de cuadrícula de los tick mayores y menores) alpha es la transparencia
# ax.grid(linestyle = '--', linewidth = 0.5, color = 'grey')
ax.grid(which='major', linestyle = '--', linewidth = 0.5, color = 'grey', alpha=0.9)
ax.grid(which='minor', linestyle = '--', lw = 0.5, color = 'grey', alpha=0.2)
# Las 2 Lineas del gráfico (X, Y1) (X, Y2)
ax.plot(X, Y1, color = (0,104/255,139/255), lw = 2, label = 'Señal Azul') #Línea del gráfico (X, Y1)
ax.plot(X, Y2, c = (0,100/255,0), lw = 2, label = 'Señal Verde') #Línea del gráfico (X, Y2)
# Gráfico de dispersion (X, Y3) markerfacecolor=relleno markeredgecolor=borde de cada o
ax.plot(X, Y3, lw = 0, marker = 'o', markerfacecolor = 'w', markeredgecolor=(139/255,105/255,20/255))
ax.set_title('Anatomia de una figura', fontsize = 20) # Leyenda del Título
ax.set_xlabel('Eje de la x') # Leyenda del eje x
ax.set_ylabel('Eje de la y') # Leyenda del eje y
ax.legend() # Vemos la leyenda de cada línea de la gráfica
# Defino la función (porque no hay otra forma) para cambiar el formato de las etiquetas de los ticks y darles valor
def tick_menor(x,pos):
if not x % 1.0: #Con el condicional le digo que no me toque los ticks mayores
return ""
else:
return "%.2f"%x
ax.xaxis.set_minor_formatter(FuncFormatter(tick_menor)) # damos valor a los ticks menores en el eje x
#circulos y textos! Creamos estas 2 funciones porque se van a repetir varias veces en el gráfico
def circulo(x,y):
circulo1 = Circle((x,y),0.15, linewidth=1, edgecolor = 'black', facecolor = (0,0,0,0.02), clip_on = False)
ax.add_artist(circulo1)
def texto(x,y,texto1):
ax.text(x,y,texto1, ha = 'center', weight='bold', color = 'blue', backgroundcolor = 'white', va = 'top')
## Llamadas a las funciones para poner círculos y textos cada uno en su posición
# Axes
texto(0.5,0.3,'Ejes')
circulo(0.5,0.5)
#Minor Tick
circulo(0.5,-0.1)
texto(0.5,-0.32,'Tick Menor etiqueta')
circulo(0.0,3.5)
texto(0.0,3.3,'Tick Menor')
#Major Tick
circulo(-0.03,4)
texto(0.03,3.8,'Tick Mayor')
circulo(-0.15,3)
texto(-0.15,2.8,'Tick Mayor etiqueta')
#Lineas
circulo(1.75,2.8)
texto(1.75,2.55,'Línea\n(línea azul)')
circulo(1.2,0.6)
texto(1.2,0.4,'Línea\n(línea verde)')
#Dispersion
circulo(3.2, 1.75)
texto(3.2,1.55,'Gráfico\n(dispersión)')
#titulo
circulo(1.60,4.13)
texto(1.60,3.93,'Título')
# ejes
circulo(1.80,-0.27)
texto(1.8,-0.5,'Eje X etiqueta')
circulo(-0.27,1.8)
texto(-0.27,1.6,'Eje Y etiqueta')
#figura
circulo(-0.3,0.65)
texto(-0.3,0.45,'Figura')
# Anotaciones dentro del gráfico
ax.annotate('Leyenda', xy = (3.6,3.65), xytext = (3.5,3.35), color = 'blue', weight = 'bold', ha = 'center',
arrowprops={'arrowstyle':'->', 'color' : 'blue', 'connectionstyle' : 'arc3'})
ax.annotate('Márgenes', xytext = (3.3, 0.45), xy = (4.0,0.35), weight = 'bold', color = 'blue',
arrowprops = {'arrowstyle':'->', 'color' : 'blue', 'connectionstyle' : 'arc3'})
# Ponemos la flecha de abajo de Márgenes y no le ponemos ningún texto.
# La 1ª coordenada xytext = (3.4, 0.4) es donde comienza. La 2ª coordenada xy = (3.25,0) es donde apunta (termina)
ax.annotate('', xytext = (3.4, 0.4), xy = (3.25,0), weight = 'bold', color = 'blue',
arrowprops = {'shrink':0.05, 'color' : 'blue', 'connectionstyle' : 'arc3'})
#plt.savefig('C:/Users/USER/Dropbox/PYTHON/Imagenes/Anatonia de una Figura.jpg') # Guardar gráfico en imagen .jpg
plt.show()
# --------------------------------------------------------------- #
![]() |
C:\Users\USER\Dropbox\BLOGGER\Imagenes\Python\002_Anatonia de una Figura.jpg |