Crear gráficos personalizados de precios de acciones

Beginner

This tutorial is from open-source community. Access the source code

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.