“转化率”是商业领域高频使用的词汇之一,通常使用漏斗图来表现各环节的转化率情况。比如产品分析时,可以看用户在每一个环节的转化情况,然后分析某个转化环节是否存在的问题(e.g.该环节转化率低于行业值或者理论参考值等)。
本文分步拆解画漏斗图的过程(python实现),如下为最终效果图。
1. 选用条形图,对应作图函数为barh;
barh绘图函数中有一个left参数,该参数可以调节条形图左侧和坐标轴的距离,也就是说可以通过调节这个参数来调整条形图变成“漏斗”的样子。
barh函数,使用left参数前后效果对比
barh函数主要参数说明
barh(bottom, width, height=0.8, left=None, **kwargs)
bottom: scalar or array-like,the y coordinate(s) of the bars
width: scalar or array-like,the width(s) of the bars
height: sequence of scalars, optional, default: 0.8, the heights of the bars
left: sequence of scalars, the x coordinates of the left sides of the bars
tags = ['浏览商品','加购物车','生成订单','支付成功','订单出仓']vals = [1000,300,200,180,160]
bar_height =0.6# 设置条形图的宽度
# 以下为衍生变量
val_max = max(vals)val_min = min(vals)val_cnt = len(vals)val_gap = [(val_max-i)/2foriinvals]y_pos = np.arange(val_cnt,,-1)
说明:
代码前3行就是“输入”的原始变量,作图用到的大部分数值变量都是从这些原始参数中计算得到的;
文章中给到的代码是“核心”部分(非完整代码),完整代码示例见文末github地址。
需要注意的是这里的zorder参数,这个是设置图层的,值越大越靠近顶层,相关信息可以参考 https://matplotlib.org/examples/pylab_examples/zorder_demo.html
第一步可以得到如下图。
2. 在已有的条形图上添加“梯形”
说明:
画梯形需要使用到matplotlib.patches模块,Polygon函数的功能是“多边形”,也就是通过设置多个顶点的坐标来“围”成一个图形;
代码中的coords就是其中一个多边形的参数设置,当然,这里是可以使用循环来迭代画多个梯形的;
zorder参数设置图层顺序,alpha参数设置透明度。
3. 在条形之间添加空心箭头
ax.arrow(500,4.8,,-0.3,\ head_width =20, head_length =0.1,width =10,\ linewidth =1, facecolor ='none')
说明:
第3,4个变量是Δ值,也就是箭头的头和尾的相对位移,是一个向量;
width是控制箭头尾巴宽度的;
4. 添加数据标签
# 在每个bar上添加数字标签
foriinrange(val_cnt): ax.text(val_max/2, y_pos[i],'{:,}'.format(vals[i]),、 fontsize =14, color ='white',、 verticalalignment ='center',horizontalalignment ='center')
核心步骤即如上所述,还有一些设置坐标轴的操作,此处不做详细说明。
总结:
复杂图形可以按元素拆解,然后分步作图,e.g. 本文中的漏斗图 = 条形图 + 梯形 + 空心箭头 + 箭头;
不管是作图还是计算的时候,要提高效率、尽可能免除手工劳动,一般需要注意两个规则——衍生规则和迭代规则。
衍生规则解决的问题是用尽可能少的原始变量去衍生出后续使用的变量;
迭代规则考虑的是如果要做N次有规则的重复操作,那么每次迭代的规则是啥,迭代的变量是啥,然后再将其转化成一个可以“自动化”循环的代码;
附:
实现代码:https://github.com/hscheng/python/tree/master/pycharts
颜色设置:https://www.cnblogs.com/darkknightzh/p/6117528.html
领取专属 10元无门槛券
私享最新 技术干货