前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python数据分析--子弹图

Python数据分析--子弹图

原创
作者头像
MiaoGIS
发布2022-04-20 16:31:25
5130
发布2022-04-20 16:31:25
举报
文章被收录于专栏:Python in AI-IOT

最近阅读学习了林骥老师的《数据化分析 Python 实战》,书中讲好的技能应该刻意的练习,而不是简单的重复。

学习林骥老师的数据可视化的每种图表时,原来代码略微修改,使其适用于自己工作业务中的数据可视化。

林骥老师将数据可视化分析源代码分享在他的GitHub空间https://github.com/linjiwx/mp

子弹图,它的样子有点像子弹,能够表达比较丰富的信息,例如表现好、中、差的取值范围,并突出显示实际值与目标值的差异情况。

林老师GitHub子弹图代码如下:

代码语言:python
代码运行次数:0
复制
# 导入所需的库
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.image as image

# 正常显示中文标签
mpl.rcParams['font.sans-serif'] = ['SimHei']

# 自动适应布局
mpl.rcParams.update({'figure.autolayout': True})

# 正常显示负号
mpl.rcParams['axes.unicode_minus'] = False


# 使用「面向对象」的方法画图
fig, ax = plt.subplots(figsize=(8, 2.6))

# 设置标题和坐标轴标签
ax.set_title("2020年3月,销售收入超额完成目标\n", fontsize=26, verticalalignment='bottom')

# 定义指标名称
y = '销售收入'

# 背景放在最底层
ax.barh(y, 200, height=0.8, color='#00589F', alpha=0.40, label='差')
ax.barh(y, 50, height=0.8, left=200, color='#00589F', alpha=0.25, label='中')
ax.barh(y, 50, height=0.8, left=250, color='#00589F', alpha=0.1, label='好')

# 隐藏的占位元素,为了让图片留有更多的空白区域
ax.barh(y, 50, height=1, left=250, color='#00589F', alpha=0)

# 实际值
ax.barh(y, 280, height=0.3, color='#00589F', label='实际')

# 目标值
lc = ax.vlines(260, -0.3, 0.3, color='#CC5036', label='目标')
# 设置线条宽度
lc.set_linewidth(3)

# 隐藏边框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)

# X 轴的刻度线朝内,调整线条的长度,让其贴近条形图
mpl.rcParams['xtick.direction'] = 'in'
ax.tick_params(axis='x', which='major', length=8)

# 隐藏 Y 轴刻度
ax.set_yticks([])

# 设置 X 轴标签
ax.set_xlabel('\n(单位:万元)', fontsize=16)

# 设置坐标标签字体大小
ax.tick_params(labelsize=20)

# 设置图例显示的位置
ax.legend(bbox_to_anchor=(1.15, 1.15))

# 在另一个坐标轴中添加 LOGO 图片
im = image.imread('./data/linji.jpg')
ax2 = fig.add_axes([0.75, -0.15, 0.08, 0.26])
ax2.imshow(im, aspect='auto', extent=(0, 1, 0, 1), zorder=-1)
# 隐藏刻度线
ax2.set_xticks([])
ax2.set_yticks([])
# 隐藏边框
ax2.spines['top'].set_visible(False)
ax2.spines['right'].set_visible(False)
ax2.spines['bottom'].set_visible(False)
ax2.spines['left'].set_visible(False)

# 设置字体
font={'family':'SimHei', 'color':'#00589F', 'size':15}

# 标示制图的作者信息
ax2.text(1, 0.2, ' 制图:林骥\n' + r'$@$' + '数据化分析', fontdict=font)

plt.show()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档