Gráfico lollipop en plotly

Gráfico lollipop en plotly

Un gráfico lollipop es una alternativa a un gráfico de barras que sustituye cada barra por un palito fino y un marcador en el extremo, lo que reduce el ruido visual al comparar muchas categorías. Plotly express no ofrece un atajo para esto, así que se construye combinando una línea (shape) por categoría (el palito) con una traza Scatter en modo marcador (el caramelo).

import plotly.graph_objects as go

# Datos de ejemplo
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]

fig = go.Figure()
for label, v in zip(labels, value):
    fig.add_shape(type = "line", x0 = 0, y0 = label, x1 = v, y1 = label,
                 line = dict(color = "gray", width = 2))

fig.add_trace(go.Scatter(
    x = value, y = labels, mode = "markers",
    marker = dict(size = 14, color = "#4C72B0")))

fig.show()

Colores

Cambia el color del palito dentro del bucle y el color del marcador a través del diccionario marker de la traza Scatter.

import plotly.graph_objects as go

# Datos de ejemplo
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]

fig = go.Figure()
for label, v in zip(labels, value):
    fig.add_shape(type = "line", x0 = 0, y0 = label, x1 = v, y1 = label,
                 line = dict(color = "#B0B0B0", width = 2))

fig.add_trace(go.Scatter(
    x = value, y = labels, mode = "markers",
    marker = dict(size = 14, color = "#C44E52")))

fig.show()

Tamaño del marcador

Ajusta marker.size para hacer el caramelo más grande o más pequeño.

import plotly.graph_objects as go

# Datos de ejemplo
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]

fig = go.Figure()
for label, v in zip(labels, value):
    fig.add_shape(type = "line", x0 = 0, y0 = label, x1 = v, y1 = label,
                 line = dict(color = "gray", width = 2))

fig.add_trace(go.Scatter(
    x = value, y = labels, mode = "markers",
    marker = dict(size = 24, color = "#4C72B0")))

fig.show()

Gráfico lollipop ordenado

Ordena las categorías por valor antes de construir las shapes y la traza scatter, así el gráfico se lee como un ranking.

import plotly.graph_objects as go

# Datos de ejemplo
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]

orden = sorted(zip(value, labels))
value, labels = zip(*orden)

fig = go.Figure()
for label, v in zip(labels, value):
    fig.add_shape(type = "line", x0 = 0, y0 = label, x1 = v, y1 = label,
                 line = dict(color = "gray", width = 2))

fig.add_trace(go.Scatter(
    x = value, y = labels, mode = "markers",
    marker = dict(size = 14, color = "#4C72B0")))

fig.show()

Orientación vertical

Intercambia los roles de X e Y tanto en las shapes como en la traza scatter para dibujar los palitos en vertical.

import plotly.graph_objects as go

# Datos de ejemplo
labels = ["G1", "G2", "G3", "G4", "G5"]
value = [12, 22, 16, 38, 12]

fig = go.Figure()
for label, v in zip(labels, value):
    fig.add_shape(type = "line", x0 = label, y0 = 0, x1 = label, y1 = v,
                 line = dict(color = "gray", width = 2))

fig.add_trace(go.Scatter(
    x = labels, y = value, mode = "markers",
    marker = dict(size = 14, color = "#4C72B0")))

fig.show()
Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon

También te puede interesar