Introducción
En este laboratorio, aprenderá a crear un gráfico de múltiples series de tiempo que demuestre el estilo personalizado del marco del trazado, las líneas de marcas de graduación, las etiquetas de marcas de graduación y las propiedades del gráfico de líneas utilizando Matplotlib. El gráfico mostrará los precios de acciones de varias empresas durante un período de 32 años.
Consejos sobre la VM
Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.
Importar las bibliotecas necesarias
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cbook import get_sample_data
import matplotlib.transforms as mtransforms
Cargar los datos de las acciones
with get_sample_data('Stocks.csv') as file:
stock_data = np.genfromtxt(
file, delimiter=',', names=True, dtype=None,
converters={0: lambda x: np.datetime64(x, 'D')}, skip_header=1)
Crear un objeto de figura y eje
fig, ax = plt.subplots(1, 1, figsize=(6, 8), layout='constrained')
Definir los colores que se utilizarán en el gráfico
ax.set_prop_cycle(color=[
'#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a',
'#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94',
'#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d',
'#17becf', '#9edae5'])
Establecer los nombres y los códigos de las acciones que se graficarán
stocks_name = ['IBM', 'Apple', 'Microsoft', 'Xerox', 'Amazon', 'Dell',
'Alphabet', 'Adobe', 'S&P 500', 'NASDAQ']
stocks_ticker = ['IBM', 'AAPL', 'MSFT', 'XRX', 'AMZN', 'DELL', 'GOOGL',
'ADBE', 'GSPC', 'IXIC']
Ajustar manualmente las posiciones de las etiquetas verticalmente para evitar superposiciones
y_offsets = {k: 0 for k in stocks_ticker}
y_offsets['IBM'] = 5
y_offsets['AAPL'] = -5
y_offsets['AMZN'] = -6
Graficar cada acción por separado con su propio color
for nn, column in enumerate(stocks_ticker):
## Plot each line separately with its own color.
## don't include any data with NaN.
good = np.nonzero(np.isfinite(stock_data[column]))
line, = ax.plot(stock_data['Date'][good], stock_data[column][good], lw=2.5)
## Add a text label to the right end of every line. Most of the code below
## is adding specific offsets y position because some labels overlapped.
y_pos = stock_data[column][-1]
## Use an offset transform, in points, for any text that needs to be nudged
## up or down.
offset = y_offsets[column] / 72
trans = mtransforms.ScaledTranslation(0, offset, fig.dpi_scale_trans)
trans = ax.transData + trans
## Again, make sure that all labels are large enough to be easily read
## by the viewer.
ax.text(np.datetime64('2022-10-01'), y_pos, stocks_name[nn],
color=line.get_color(), transform=trans)
Establecer los límites de los ejes x e y, y agregar título y cuadrícula
ax.set_xlim(np.datetime64('1989-06-01'), np.datetime64('2023-01-01'))
fig.suptitle("Technology company stocks prices dollars (1990-2022)", ha="center")
ax.spines[:].set_visible(False)
ax.xaxis.tick_bottom()
ax.yaxis.tick_left()
ax.set_yscale('log')
ax.grid(True,'major', 'both', ls='--', lw=.5, c='k', alpha=.3)
ax.tick_params(axis='both', which='both', labelsize='large',
bottom=False, top=False, labelbottom=True,
left=False, right=False, labelleft=True)
Mostrar el gráfico
plt.show()
Resumen
En este laboratorio, aprendiste cómo crear un gráfico de múltiples series de tiempo que demuestra el estilo personalizado del marco del gráfico, las líneas de marcas de graduación, las etiquetas de marcas de graduación y las propiedades del gráfico de líneas utilizando Matplotlib. También aprendiste cómo graficar cada acción por separado con su propio color, establecer los límites de los ejes x e y, y agregar título y cuadrícula.