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()
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()
También te puede interesar