pyecharts

pyecharts有漏斗图的模板(点击链接),套用即可。

代码

from pyecharts import options as opts
from pyecharts.charts import Funneldata = [135043, 113413, 74909, 10366, 9018, 4151]
phase = ['总访客数量  ', '活跃访客数量', '注册用户数量', '预定用户数量', '支付用户数量', '复购用户数量']c = (Funnel().add("阶段", [list(z) for z in zip(phase, data)]).set_global_opts(title_opts=opts.TitleOpts(title="漏斗图")).render("funnel.html")
)

图片


虽然绘制方便,但是美观程度一般。

matplotlib

使用matplotlib绘制的思路是,绘制两个横向柱状图,其中一个设置成背景色遮住另一个的部分柱长,再绘制多边形填充两个柱子之间的间隔。

代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.patches import Polygon  # Polygon()可以用来传入按顺序组织的多边形顶点,从而生成出多边形
from matplotlib.collections import PatchCollectionplt.style.use('seaborn-dark')  # 设置主题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号visitor_num = 135043
data = [135043, 113413, 74909, 10366, 9018, 4151]
phase = ['总访客数量  ', '活跃访客数量', '注册用户数量', '预定用户数量', '支付用户数量', '复购用户数量']
data1 = [visitor_num/2 - i/2 for i in data]
data2 = [i+j for i,j in zip(data, data1)]
color_list = [ '#5c1d1d', '#892c2c','#994a4a', '#c56161', '#d48989', '#e2b0b0']  # 柱子颜色fig,ax = plt.subplots(figsize=(16, 9),facecolor='#f4f4f4')
ax.barh(phase[::-1], data2[::-1], color = color_list, height=0.7)  # 柱宽设置为0.7
ax.barh(phase[::-1], data1[::-1],  color = '#f4f4f4', height=0.7)  # 设置成背景同色
ax.axis('off')polygons = []
for i in range(len(data)):# 阶段ax.text(0,  # 坐标i,  # 高度phase[::-1][i],  # 文本color='black', alpha=0.8, size=16, ha="right")# 数量ax.text(data2[0] / 2 ,  i, str(data[::-1][i]) +'(' +str(round(data[::-1][i] / data[0] * 100, 1)) + '%)', color='black', alpha=0.8, size=18, ha="center")if i < 5:# 比例ax.text(data2[0] / 2 ,  4.4 - i, str(round(data[i+1] / data[i], 3) * 100) + '%', color='black', alpha=0.8, size=16, ha="center")# 绘制多边形polygons.append(Polygon(xy=np.array([(data1[i+1], 4+0.35-i),   # 因为柱状图的宽度设置成了0.7,所以一半便是0.35(data2[i+1], 4+0.35-i), (data2[i], 5-0.35-i), (data1[i], 5-0.35-i)])))# 使用add_collection与PatchCollection来向Axes上添加多边形
ax.add_collection(PatchCollection(polygons, facecolor='#e2b0b0',alpha=0.8));plt.show()

图片


ploty

2021-09-22更新
最近接触到ploty,发现有现成的库,较为美观,遂更新下文章,出处(https://plotly.com/python/funnel-charts/)。

基础漏斗图

import plotly.express as px
data = dict(number=[39, 27.4, 20.6, 11, 2],stage=["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"])
fig = px.funnel(data, x='number', y='stage')
fig.show()

堆积漏斗图

import plotly.express as px
import pandas as pd
stages = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"]
df_mtl = pd.DataFrame(dict(number=[39, 27.4, 20.6, 11, 3], stage=stages))
df_mtl['office'] = 'Montreal'
df_toronto = pd.DataFrame(dict(number=[52, 36, 18, 14, 5], stage=stages))
df_toronto['office'] = 'Toronto'
df = pd.concat([df_mtl, df_toronto], axis=0)
fig = px.funnel(df, x='number', y='stage', color='office')
fig.show()

带有各项指标的漏斗图

from plotly import graph_objects as gofig = go.Figure(go.Funnel(y = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"],x = [39, 27.4, 20.6, 11, 2]))fig.show()


鼠标悬浮在图上可以看到当前阶段的各项占比

漏斗图自定义颜色

from plotly import graph_objects as gofig = go.Figure(go.Funnel(y = ["Website visit", "Downloads", "Potential customers", "Requested price", "Finalized"],x = [39, 27.4, 20.6, 11, 2],textposition = "inside",textinfo = "value+percent initial",opacity = 0.65, marker = {"color": ["deepskyblue", "lightsalmon", "tan", "teal", "silver"],"line": {"width": [4, 2, 2, 3, 1, 1], "color": ["wheat", "wheat", "blue", "wheat", "wheat"]}},connector = {"line": {"color": "royalblue", "dash": "dot", "width": 3}}))fig.show()

带有各项指标的堆积漏斗图

from plotly import graph_objects as gofig = go.Figure()fig.add_trace(go.Funnel(name = 'Montreal',y = ["Website visit", "Downloads", "Potential customers", "Requested price"],x = [120, 60, 30, 20],textinfo = "value+percent initial"))fig.add_trace(go.Funnel(name = 'Toronto',orientation = "h",y = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"],x = [100, 60, 40, 30, 20],textposition = "inside",textinfo = "value+percent previous"))fig.add_trace(go.Funnel(name = 'Vancouver',orientation = "h",y = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent", "Finalized"],x = [90, 70, 50, 30, 10, 5],textposition = "outside",textinfo = "value+percent total"))fig.show()

使用Python matplotlib库绘制漏斗图相关推荐

  1. Python Matplotlib库绘制曲线图 最快入门教程(最详细最简单)

    文章目录 1.导入Matplotlib库 2.最常用的绘图函数plot 3.展示绘制完成的图像 4.保存绘制的图像 5.分割子绘图区域 6.设置横纵轴的坐标轴名称 7.设置图像名称 8.让图像中可以出 ...

  2. python使用matplotlib绘图sigmoid_使用matplotlib库绘制函数图

    函数如下: z = x^2 * y / (x^4 +y^2) 代码如下: import numpy as np import matplotlib.pyplot as plt import mpl_t ...

  3. python中matplotlib条形图-python matplotlib库绘制条形图练习题

    练习一:假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据? a = ["战狼2","速度与激情8" ...

  4. python绘制条形图-python matplotlib库绘制条形图练习题

    练习一:假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据? a = ["战狼2","速度与激情8" ...

  5. python画条形图并分类-python matplotlib库绘制条形图练习题

    练习一:假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据? a = ["战狼2","速度与激情8" ...

  6. 【数据处理】python使用matplotlib如何绘制动图;如何使用python进行动图gif制作;实时绘制动态图

    一.现有的集成工具 绘制动图可以用一些现有的集成库,但是很麻烦,你需要调整和他们一样的参数和格式,定制化程度比较低,还得再去搞懂它们的东西.比如这些现有的: https://github.com/Ja ...

  7. Python中使用random随机函数与Matplotlib库绘制随机漫步图

    Python中使用random随机函数与Matplotlib库绘制随机漫步图 一.概述 随机现象在我们的生活中并不少见,我们常见的一次抛硬币的正反面,股票的走势等等,都是随机事件.这些不确定性事件给我 ...

  8. Python学习-Matplotlib库绘制简单点阵图、线型图操作

    Python学习-Matplotlib库绘制简单散点图图和线型图.标签设置以及刻度线设置操作 目录 1.Matplotlib绘图细节的简单理解 2.绘制点图.线型图 3.给图表设置复杂标注 4.移动刻 ...

  9. python的matplotlib库绘制条形图、散点图、饼图、折线图

    python的matplotlib库绘制条形图.散点图.饼图.折线图 当我们学会了爬虫,抓取到了一些数据,接下来就是做数据分析了.本文章介绍绘制图形的基本代码. 打开cmd用pip 安装,若输入pip ...

最新文章

  1. embedding层和全连接层的区别是什么 一般说embedding层,实现方式就是一个没有bias的fc层
  2. asp 把大图缩小显示的JS
  3. python输入完怎么运行-教你如何编写、保存与运行Python程序的方法
  4. php 自带过滤和转义函数
  5. Zookeeper数据一致性原理
  6. 【Flink】Flink 报错 Writing records to streamload failed
  7. Android Fragment 使用详解
  8. android选择图片,通过uri获取路径
  9. 调整计算机屏幕亮度快捷键,笔记本亮度调节的快捷键
  10. Zemax学习笔记(4)- 设计单透镜实例_1,设置
  11. windows下使用XShell上传文件至服务器
  12. android url带参数传递,android平台通过http post方式向远程URL传递参数并获取返回数据...
  13. 搜狐Q3由盈转亏:预计全年收入下滑12%,张朝阳归因于不确定性
  14. 微信小程序引入组件以及catchtouchmove实现拖动效果
  15. python 判断是否为中文
  16. 关于计算机的英语演讲稿三分钟,三分钟电脑的英文演讲稿5篇.doc
  17. 有没有python搜题_python搜题公众号
  18. TIA博途V16专业版与博途V15.1专业版或其他版本能否安装在同一台PC中?
  19. 枚举的定义和使用,位域相关知识
  20. 利用云服务器实现自动化(自动上报)

热门文章

  1. 运用R语言(ggplot2包)绘制箱式图
  2. Code-Behind技术
  3. linux系统镜像怎么克隆好友,使用SystemImager克隆Linux系统
  4. 南大通用GBase8s 常用SQL语句(289)
  5. maven 快照 更新策略
  6. matlab计算aqi的程序,计算AQI
  7. HTML标签和标签的属性
  8. 智能化防杀未知电脑病毒探讨
  9. 【HTML 中的二次贝塞尔曲线 和三次贝塞尔曲线】(使用说明详解)
  10. 乘积尾零的两种思路与解法