Gráfico de velas (candlestick) en plotly

Gráfico de velas en plotly con Candlestick

Un gráfico de velas muestra el precio de apertura, máximo, mínimo y cierre (OHLC) de un activo en cada periodo, por lo que se usa sobre todo para datos financieros. Usa la clase Candlestick de plotly.graph_objects, pasando un array de fechas a x y las cuatro series de precios a open, high, low y close.

import plotly.graph_objects as go
import pandas as pd

# Datos de ejemplo
fechas = pd.date_range("2024-01-01", periods = 10, freq = "D")
apertura = [100, 102, 101, 104, 103, 105, 107, 106, 108, 110]
maximo = [103, 104, 105, 106, 106, 108, 109, 109, 111, 113]
minimo = [99, 100, 100, 102, 101, 104, 105, 104, 107, 108]
cierre = [102, 101, 104, 103, 105, 107, 106, 108, 110, 109]

fig = go.Figure(data = [go.Candlestick(
    x = fechas, open = apertura, high = maximo, low = minimo, close = cierre)])

fig.show()

Colores

El color de las velas alcistas y bajistas se fija de forma independiente con los argumentos increasing y decreasing, cada uno acepta un dict con la clave line_color (y opcionalmente fillcolor).

import plotly.graph_objects as go
import pandas as pd

# Datos de ejemplo
fechas = pd.date_range("2024-01-01", periods = 10, freq = "D")
apertura = [100, 102, 101, 104, 103, 105, 107, 106, 108, 110]
maximo = [103, 104, 105, 106, 106, 108, 109, 109, 111, 113]
minimo = [99, 100, 100, 102, 101, 104, 105, 104, 107, 108]
cierre = [102, 101, 104, 103, 105, 107, 106, 108, 110, 109]

fig = go.Figure(data = [go.Candlestick(
    x = fechas, open = apertura, high = maximo, low = minimo, close = cierre,
    increasing_line_color = "#55A868", decreasing_line_color = "#C44E52")])

fig.show()

Quitar el selector de rango

Por defecto plotly añade un selector de rango debajo del gráfico. Quítalo poniendo xaxis_rangeslider_visible a False con update_layout.

import plotly.graph_objects as go
import pandas as pd

# Datos de ejemplo
fechas = pd.date_range("2024-01-01", periods = 10, freq = "D")
apertura = [100, 102, 101, 104, 103, 105, 107, 106, 108, 110]
maximo = [103, 104, 105, 106, 106, 108, 109, 109, 111, 113]
minimo = [99, 100, 100, 102, 101, 104, 105, 104, 107, 108]
cierre = [102, 101, 104, 103, 105, 107, 106, 108, 110, 109]

fig = go.Figure(data = [go.Candlestick(
    x = fechas, open = apertura, high = maximo, low = minimo, close = cierre)])
fig = fig.update_layout(xaxis_rangeslider_visible = False)

fig.show()

Título

Añade un título de la misma forma que en cualquier otra figura de plotly, con update_layout.

import plotly.graph_objects as go
import pandas as pd

# Datos de ejemplo
fechas = pd.date_range("2024-01-01", periods = 10, freq = "D")
apertura = [100, 102, 101, 104, 103, 105, 107, 106, 108, 110]
maximo = [103, 104, 105, 106, 106, 108, 109, 109, 111, 113]
minimo = [99, 100, 100, 102, 101, 104, 105, 104, 107, 108]
cierre = [102, 101, 104, 103, 105, 107, 106, 108, 110, 109]

fig = go.Figure(data = [go.Candlestick(
    x = fechas, open = apertura, high = maximo, low = minimo, close = cierre)])
fig = fig.update_layout(title = "Precio de la acción", xaxis_rangeslider_visible = False)

fig.show()

Ocultar los huecos de fin de semana

Con datos diarios de bolsa, los fines de semana no tienen negociación y dejan huecos vacíos en el eje X. Elimínalos añadiendo un rangebreak para sábados y domingos.

import plotly.graph_objects as go
import pandas as pd

# Datos de ejemplo (solo días laborables)
fechas = pd.bdate_range("2024-01-01", periods = 10)
apertura = [100, 102, 101, 104, 103, 105, 107, 106, 108, 110]
maximo = [103, 104, 105, 106, 106, 108, 109, 109, 111, 113]
minimo = [99, 100, 100, 102, 101, 104, 105, 104, 107, 108]
cierre = [102, 101, 104, 103, 105, 107, 106, 108, 110, 109]

fig = go.Figure(data = [go.Candlestick(
    x = fechas, open = apertura, high = maximo, low = minimo, close = cierre)])
fig = fig.update_xaxes(rangebreaks = [dict(bounds = ["sat", "mon"])])

fig.show()
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon

También te puede interesar