Gráficos de embudo (Funnel charts) en plotly

Gráficos de embudo en plotly con funnel

Un gráfico de embudo representa datos en diferentes etapas de un proceso, generalmente un embudo de ventas. Puede utilizarse como herramienta para encontrar cuellos de botella en un proceso empresarial. En plotly y Python puedes crear un gráfico de embudo o funnel chart con la función funnel del módulo plotly express. Tendrás que pasar tus valores a x y las etapas a y.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    etapa = ['Enviados', 'Recibidos', 'Clicks', 'Ventas'],
    porcentaje = [100, 70, 30, 10]))

fig = px.funnel(df, x = 'porcentaje', y = 'etapa', title = "Funnel title")

# Alternative:
# fig = px.funnel(x = [100, 70, 30, 10],
#                 y = ['Enviados', 'Recibidos', 'Clicks', 'Ventas'], title = "Funnel title")

fig.show()

Textos

La función proporciona un argumento llamado text que permite pasar otro array o nombre de columna como input para agregar textos junto con los valores por defecto. En el siguiente ejemplo pasamos el número total de personas en cada etapa.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    etapa = ['Enviados', 'Recibidos', 'Clicks', 'Ventas'],
    porcentaje = [100, 70, 30, 10],
    numero = [5000, 3500, 1500, 500]))

fig = px.funnel(df, x = 'porcentaje', y = 'etapa', text = 'numero')

fig.show()

Color

Utilizando el argumento color_discrete_sequence puedes personalizar el color por defecto de las etapas. Ten en cuenta que con update_traces puedes controlar más estilos, como el color de fuente de los textos.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    etapa = ['Enviados', 'Recibidos', 'Clicks', 'Ventas'],
    porcentaje = [100, 70, 30, 10],
    numero = [5000, 3500, 1500, 500]))

fig = px.funnel(df, x = 'porcentaje', y = 'etapa',
                color_discrete_sequence = ['lightcoral'], opacity = 1)
fig.update_traces(textfont = {'color': 'white'})

fig.show()

Resaltar una etapa

También puedes personalizar el estilo de los bordes de cada etapa con update_traces. Esto te permitirá resaltar algunas etapas, como en el ejemplo siguiente.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    etapa = ['Enviados', 'Recibidos', 'Clicks', 'Ventas'],
    porcentaje = [100, 70, 30, 10]))

fig = px.funnel(df, x = 'porcentaje', y = 'etapa',
                color_discrete_sequence = ['lightcoral'], opacity = 1)
fig.update_traces(marker = {'line': {'width': [1, 1, 3, 1], 'color': ['gray', 'gray', 'blue', 'gray']}})

fig.show()

Varios grupos

La función funnel se puede utilizar para comparar varios grupos, categorías o campañas. Tendrás que pasar tu variable categórica a color para ello.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    etapa = ['Enviados', 'Recibidos', 'Clicks', 'Ventas',
             'Enviados', 'Recibidos', 'Clicks', 'Ventas'],
    porcentaje = [70, 32, 20, 4,
                  30, 38, 10, 6],
    campaña = ['C1', 'C1', 'C1', 'C1',
                'C2', 'C2', 'C2', 'C2']))

fig = px.funnel(df, x = 'porcentaje', y = 'etapa', color = 'campaña')

fig.show()

Ten en cuenta que puedes cambiar el color por defecto para cada grupo pasando un array con tantos colores como grupos a color_discrete_sequence o especificando un color para cada grupo con color_discrete_map.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    etapa = ['Enviados', 'Recibidos', 'Clicks', 'Ventas',
             'Enviados', 'Recibidos', 'Clicks', 'Ventas'],
    porcentaje = [70, 32, 20, 4,
                  30, 38, 10, 6],
    campaña = ['C1', 'C1', 'C1', 'C1',
                'C2', 'C2', 'C2', 'C2']))

fig = px.funnel(df, x = 'porcentaje', y = 'etapa', color = 'campaña',
                color_discrete_map = {'C1': '#FFDD71', 'C2': '#9FCD99'})
fig.update_traces(textfont = {'color': 'white'})

fig.show()

Gráfico de embudo de áreas con funnel_area

Una alternativa a la función anterior es funnel_area, que calcula el porcentaje asociado a cada etapa y representa cada etapa con un tamaño proporcional a ese porcentaje. La sintaxis es muy similar a funnel, pero los nombres de los argumentos son names y values en lugar de x e y.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    etapa = ['Enviados', 'Recibidos', 'Clicks', 'Ventas'],
    numero = [50, 20, 15, 10]))

fig = px.funnel_area(df, names = 'etapa', values = 'numero')

fig.show()

Recuerda que el color de cada etapa también se puede personalizar con color_discrete_sequence.

import plotly.express as px
import pandas as pd

# Datos de muestra
df = pd.DataFrame(dict(
    etapa = ['Enviados', 'Recibidos', 'Clicks', 'Ventas'],
    numero = [50, 20, 15, 10]))

fig = px.funnel_area(df, names = 'etapa', values = 'numero',
                     color_discrete_sequence = ['red', 'blue', 'orange', 'green'])

fig.show()
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon

También te puede interesar