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