当前位置:首页 > 热点 > 可视化神器Plotly玩转漏斗图

可视化神器Plotly玩转漏斗图

2026-11-14 [融资资讯] 来源:人文荟萃网

 

认识漏斗图

漏斗图是网站销售领域一种十分常用的图表,主要是用来分析在各个阶段的流失和转化情况。比如在某个商城中,我们统计用户在不同阶段的人数来分析转化率:

商城UV:商城每天的访问人数 搜索人数:在商城有过搜索行为的用户数 加购人数:有加购行为的用户数 提交订单:有多少用户提交订单 点击支付:提交订单之后有多少用户点击支付按钮 支付成功:最终支付成功的用户数

从搜索人数开始到支付成功,每个阶段用户都存在一定的流失,漏斗图就能很好地将这种流失和转化情况显示出来。

除去柱状图、饼图、折线图,漏斗图应该是自己在工作画的最为频繁的一种图表。下面我们通过模拟某个电商网站的用户行为来绘制漏斗图。

整体效果

看一个漏斗图的整体效果:

视频

导入库

基于两种方式实现:

plotly_express :px plotly.graph_objects:go import pandas as pd import numpy as np  # plotly两个绘图接口 import plotly_express  as px import plotly.graph_objects as go  基于px实现

基础漏斗图

模拟一份商城数据:

data1 = pd.DataFrame({     "number": [1200,900,700,400,180,100],     "stage": ["浏览网站","搜索","加购","提交订单","点击支付","支付成功"]} ) data1 

绘制一个基础漏斗图:

# 绘图&nbs可视p;fig = px.funnel(     data1,  # 待绘图数据     x="number",  # x轴的数据     y="stage"  # y轴的数据 )  fig.show() 

我们还可以加上一个颜色参数color:

# 加上颜色参数color  fig = px.funnel(   data1,   x="number",   y="stage",   color="number"  # 颜色参数 )  fig.show() 

如果我们的颜色设置成number列,用数值意义似乎不准确,更好地应该是不同的阶段表示,换成stage:

# 加上颜色参数color  fig = px.funnel(   data1,   x="number",   y="stage",   color="stage"   # !!!改成stage )  fig.show() 

看生成的漏斗图:最上面的是支付成功,通常我们希望的是数值最大的在最上面,于是我们将传入的数据翻转一下:

#&nbs化神p;加上颜色参数color  fig = px.funnel(   data1[::-1],   # !!!数据翻转   x="number",   y="stage",   color="stage"   # !!!改成stage )  fig.show() 

分组漏斗

分组漏斗表示的含义将不同组别的漏斗图放在一个画布中,比如:看今年3月和2020年3月的数据对比情况,这叫做同比

同比:相同时期的对比,比如:2021年3月和2020年3月

环比:相邻时期的对比,比如:2021年3月和2021年2月

1、2020年3月份数据

2、2021年3月份数据

3、使用concat函数合并两组数据

4、绘制漏斗图

# 绘图  fig = px.funnel(df3,x="number",y="stages",color="time") fig.show() 

绘制面积漏斗图

还是使用最上面的数据:

fig = px.funnel_area(     data1,     names = "stage",     values = "number", )  fig.show() 

我们观察到:面积漏斗图默认绘制的百分比,而普通漏斗图是数值

基于go实现

绘制基础漏斗图

from plotly&nb器Psp;import graph_objects as go  fig = go.Figure(go.Funnel(     x=[1000,800,400,100],     y=["浏览网站","加购","点击支付","支付成功"] ))  fig.show() 

改变漏斗图的颜色和边框

from plotly import graph_objects as go  fig = go.Figure(go.Funnel(     x=[1000,800,400,100],  # 数据     y=["浏览网站","加购","点击支付","支付成功"], # 每个阶段的名称     textposition = "inside",  #  文本位置:['inside', 'outside', 'auto', 'none']      textinfo = "value + percent initial",   # 显示文本信息 ['label', 'text', 'percent initialol', 'percent previous', 'percent total', 'value'] 前面选项的任意组合     opacity = 0.65,      marker = {"color": ["deepskyblue", "lightsalmon", "tan", "silver"],               "line": {"width": [4, 2, 3, 1, 1],                         "color": ["wheat", "wheat", "blue", "yellow"]}},     connector = {"line": {"color": "royalblue", "dash": "dot", "width": 3}})     )&nbtlsp; fig.show() 

我们需要注意textinfo参数的使用,它有3种使用方式:

percent initial:相对于初始值 percent previous:相对于前一个值 percent total:相对于整体数值

上面这个漏斗图使用的是percent initial(相对于初始值),百分比是这样来的:

1000/1000 = 100% 800 / 1000 = 80% 400 / 1000 = 40% 100 / 1000 = 10% 

如果是percent previous:

1000/1000 = 100% 800 / 1000 = 80% 400 / 800 = 50% 100 / 400 = 25% 

如果是percent total:

我们看看第一个百分比是如何计算的:

分组漏斗

from plotly import graph_objects as go  stage = ["浏览网站","加购","点击支付","支付成功"]  fig = go.Figure()  fig.add_trace(go.Funnel(     name = "2020年3月",  # 图形轨迹名称     x&nbsy玩p;= [1000,800,400,200],  # 数据     y = stage, # 每个阶段名称     orientation = "h",  # 方位     textposition = "inside",  # 文本内容的位置     textinfo = "value+percent previous"  # 显示文本内容 ))   fig.add_trace(go.Funnel(     name = "2021年2月",   # 名称和数据需要改变     x = [1200,900,500,240],       y = stage,      orientation = "h",       textposition = "inside",       text转漏info = "value+percent total"   ))  fig.add_trace(go.Funnel(     name = "2021年3月",  # 名称和数据需要改变     x = [1500,1000,450,300],       y = stage,      orientation = "h",       textposition = "inside",       textinfo = "label+percent initial"   ))   fig.show() 

在上面的图中,既可以观察到同比情况(2020年3月和2021年3月),也可以观察到环比情况(2021年3月和2月)

面积漏斗

from plotly import graph_objects as go  fig = go.Figure(go.Funnelarea(     text = ["浏览网站","加购","点击支付","支斗图付成功"],     values = [5000, 2000, 800, 500],  ))  fig.show() 

设置面积漏斗的颜色和边框

from plotly import graph_objects as go  fig = go.Figure(go.Funnelarea(     values = [3000, 2000, 800, 500],      text = ["浏览网站","加购","点击支付","支付成功"],     marker = {"colors": ["deepskyblue", "lightsalmon", "teal", "silver"],  # 颜色               "line": {"color": ["red", "blue", "wheat", "wheat"],   # 边框颜色和线条宽度        &n可视bsp;               "width": [0, 1, 3, 5]}},     textfont = {"family": "Old Standard TT, serif", "size": 13,   # 字体设置                 "color": "black"},      opacity = 0.65))  # 透明度 fig.show() 

多组面积漏斗

不同组别的漏斗图我们也可以分开放,将它们放在一个大的画布中:

from plotly import graph_objects as go  fig = go.Figure()  # 添加四组数据:第一季度到第四季度 fig.add_trace(go.Funnelarea(     scalegroup = "first",   # 组别名称  &化神nbsp;  text = ["浏览网站","搜索","加购","提交订单","点击支付","支付成功"],     values = [500, 450, 340, 230, 220, 110],  # 数据     textinfo = "value",  # 显示文本信息     title = {"position": "top center",  # 标题顶部居中              "text": "第一季度"  # 标题内容             },     domain = {"x": [0, 0.5], # 图形位置               "y": [0, 0.5]     &n器Pbsp;        }))  fig.add_trace(go.Funnelarea(     scalegroup = "first",      text = ["浏览网站","搜索","加购","提交订单","点击支付","支付成功"],     values = [600, 500, 400, 300, 200, 100],      textinfo = "value",     title = {"position": "top center",               "text": "第二季度"},     domain = {"x": [0, 0.5],                "y": [0.55, 1]}))  fig.add_tlorace(go.Funnelarea(     scalegroup = "second",      text = ["浏览网站","搜索","加购","提交订单","点击支付","支付成功"],     values = [510, 480, 440, 330, 220, 100],      textinfo = "value",     title = {"position": "top left",               "text": "第三季度"},     domain = {"x": [0.55, 1],                "y": [0, 0.5]}))  fig.add_trace(go.Funnelarea(     scalegroup = "secondtl",      text = ["浏览网站","搜索","加购","提交订单","点击支付","支付成功"],     values = [360, 250, 240, 130, 120, 60],     textinfo = "value",      title = {"position": "top right",               "text": "第四季度"},     domain = {"x": [0.55, 1],                "y": [0.55, 1]}))  fig.update_layout(     margin = {"l": 100, "r": 100},   # 整个图形到左右边框的距离   y玩  shapes = [             {"x0": 0, "x1": 0.5, "y0": 0, "y1": 0.5},   # 添加4组位置             {"x0": 0, "x1": 0.5, "y0": 0.55, "y1": 1},             {"x0": 0.55, "x1": 1, "y0": 0, "y1": 0.5},             {"x0": 0.55, "x1": 1, "y0": 0.55, "y1": 1}     ])  fig.show() 

漏斗图真的很好用,能够观察到数据在不同阶段的转化情况。

 

(责任编辑:发售日历)

推荐文章
  • 过半作者是华人!Google Research图像表征模型ALIGN霸榜ImageNet

    过半作者是华人!Google Research图像表征模型ALIGN霸榜ImageNet 神经网络实际上就是在学习一种表示,在CV领域,良好的视觉和视觉语言(vision and vision-language)表征对于解决计算机视觉问题(图像检索、图像分类、视频理解)至关重要,并且可以帮...[详细]
  • AI换脸有危险,VR滑雪体验棒

    AI换脸有危险,VR滑雪体验棒 市民体验VR滑雪。 本报讯(记者 陈龙) 5月27日,2021数博会进入第二天。上午9时许,记者在贵阳国际会议展览中心W1A03奇安信展位看到,这里有不少市民正在体验科技感十足的互动项目。走访期间,“...[详细]
  • 游戏开发商Epic扩大与苹果纠纷:在英国起诉苹果垄断

    游戏开发商Epic扩大与苹果纠纷:在英国起诉苹果垄断 新浪科技讯 1月15日上午消息,据报道,游戏开发商Epic向英国反垄断法庭提交了一份申诉,扩大了与苹果公司在其热门游戏《堡垒之夜》(Fortnite)的准入方面的纠纷。 该公司称,苹果从App Sto...[详细]
  • 标签: 智谱 唐杰 AGI TouchHigh

    标签: 智谱 唐杰 AGI TouchHigh 云梦级7月11日云梦级消息,港股上市大模型企业智谱在限售股解禁后股价出现大幅波动。智谱截止昨日休市跌超19%,今日晚间,智谱创始人唐杰,发布主题为《巨浪已来》的内部信。 唐杰提出延续“反直觉”路线,并...[详细]
  • 标签: 逸仙电商 黄锦峰 信宸资本 阿克希龙

    标签: 逸仙电商 黄锦峰 信宸资本 阿克希龙 云梦级3月13日云梦级消息,3月11日,逸仙电商发布公告,通过定向发行可转债的方式引入战略资本,认购方阵容极具战略意义——由创始人、董事长兼首席执行官黄锦峰与中信资本旗下私募股权投资业务信宸资本联合出...[详细]
  • 标签: 禾赛科技 ATX 吉利银河 激光雷达

    标签: 禾赛科技 ATX 吉利银河 激光雷达 云梦级12月11日云梦级消息,禾赛科技宣布,禾赛远距激光雷达 ATX 已量产搭载于吉利银河 V900。同时,禾赛远距激光雷达 AT 系列获得吉利银河品牌 2025 和 2026 年多款车型定点,并将陆...[详细]
  • 字节跳动重奖大模型人才,Seed部门推百万期权激励计划

    字节跳动重奖大模型人才,Seed部门推百万期权激励计划 AIbase报道 据科创板日报消息,字节跳动正为其关键的Seed部门启动一项新的期权增发计划,旨在激励并留住从事大模型方向的核心技术人才。此举凸显了该公司在人工智能领域的雄心,并加剧了顶尖技术人才的争...[详细]
  • 标签: OnlyFans LeonidRadvinsky 社交平台 成人内容

    标签: OnlyFans LeonidRadvinsky 社交平台 成人内容 云梦级3月24日云梦级消息,社交平台 OnlyFans 宣布,其所有者列昂尼德·拉德文斯基(Leonid Radvinsky)去世,享年 43 岁。OnlyFans 在声明中证实,拉德文斯基是在与癌症...[详细]
  • 标签: 青心意创 ORCA 陪伴机器人 具身机器人

    标签: 青心意创 ORCA 陪伴机器人 具身机器人 云梦级3月23日云梦级消息,今天,青心意创宣布完成近亿元Pre-A轮融资,本轮融资由厚雪资本和天际资本领投,老股东乐朴资本持续跟投,新辉资本担任长期财务顾问。 本轮融资将主要用于超小型双足陪伴机器人的...[详细]
  • 标签: 理想汽车 Nexus 何俊培 人形机器人

    标签: 理想汽车 Nexus 何俊培 人形机器人 云梦级3月6日云梦级消息,据一见Auto援引多个信源云梦级消息称,理想汽车的人形机器人团队已秘密研发产品将近一年,团队在内部代号为 Nexus(中文意为“连接”“纽带”),负责人是前机器人创业公司九光...[详细]