前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >绘制统计图形(一)

绘制统计图形(一)

作者头像
python数据可视化之路
发布2023-02-23 21:12:23
1.6K0
发布2023-02-23 21:12:23
举报
文章被收录于专栏:python数据分析实践

此节内容与上一节内容类似,可以看做是并列关系。本节以实例的方式来为大家讲解各种图形的应用,并介绍一些新的图形。

1 堆积图

主要结合柱状图和条形图的绘制方法来说明堆积柱状图和堆积条形图的实现方法。

1.1 堆积柱状图

仅在第二个柱状图中添加bottom参数即可。

代码如下:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
#设定数据
x = [1, 2, 3, 4, 5]
y = [6, 10, 4, 5, 1]
y1 = [2, 6, 3, 8, 5]
#绘制柱状图
plt.bar(x, y, align = 'center', color = '#0000ff', tick_label = ['A', 'B', 'C', 'D', 'E'], label = '班级A')
plt.bar(x, y1, align = 'center', bottom = y, color = '#00ff00', label = '班级B')
plt.ylabel('试卷份数') #设定y轴标签
plt.legend() #绘制图例
plt.show()

1.2 堆积条形图

仅在第二个柱状图中添加left参数即可。

代码如下:

代码语言:javascript
复制
plt.barh(x, y, align = 'center', color = '#0000ff', tick_label = ['A', 'B', 'C', 'D', 'E'], label = '班级A')
plt.barh(x, y1, align = 'center', left = y, color = '#00ff00', label = '班级B')
plt.ylabel('测试难度')
plt.legend()
plt.show()

2 分块图

分块图可以分为多数据并列柱状图和多数据平行条形图。结合柱状图和条形图来绘制多数据并列柱状图和多数据平行条形图。

2.1 多数据并列柱状图

代码如下:

代码语言:javascript
复制
x = np.arange(5)
y1 = [6, 10, 5, 1, 4]
y2 = [2, 6, 3, 8, 5]
bar_width = 0.4
tick_label = ['A', 'B', 'C', 'E', 'F']
plt.bar(x, y1, bar_width, color = '#0000ff', align = 'center', label = '班级A')
plt.bar(x+bar_width, y2, bar_width, color = '#00ff00', align = 'center', label = '班级B')
plt.ylabel('试卷份数')
#设置x轴标签放置位置,并指定x轴标签
plt.xticks(x+bar_width/2, tick_label)
plt.legend()
plt.show()

关于bar_width的数值设定,根据不同的情况自己尝试,多试试就好了。

2.1 多数据并列条形图

代码如下:

代码语言:javascript
复制
plt.barh(x, y1, bar_width, color = '#0000ff', align = 'center', label = '班级A')
plt.barh(x+bar_width, y2, bar_width, color = '#00ff00', align = 'center', label = '班级B')
plt.ylabel('测试难度')
#设置x轴标签放置位置,并指定x轴标签
plt.yticks(x+bar_width/2, tick_label)
plt.legend()
plt.show()

3 堆积折线图、间断条形图和阶梯图

3.1 堆积折线图

堆积折线图是通过绘制不同数据及的折线图而生成的。堆积折线图是按照垂直方向上彼此堆叠且又不相互覆盖的顺序排列,绘制若干条折线图而形成的组合图形。

代码如下:

代码语言:javascript
复制
x = np.arange(1, 6, 1)
y1 = [0, 4, 3, 5, 6]
y2 = [1, 3, 4, 2, 7]
y3 = [3, 4, 1, 6, 5]
label = ['BluePlanet', 'BrownPlanet', 'GreenPlanet']
colors = ['#8da0cb', '#fc8d62', '#66c2a5']
plt.stackplot(x, y1, y2, y3, labels = label, colors = colors)
plt.xlim(1, 5) #限定x轴范围
plt.legend(loc = 'upper left')
plt.show()

3.2 间断条形图

间断条形图是在条形图的基础上绘制而成,主要用来可视化定性数据的相同指标在时间维度上的指标值的变化情况,实现定性数据的相同指标的变化情况的有效直观比较。

代码如下:

代码语言:javascript
复制
plt.broken_barh([(30, 100), (180, 50), (260, 70)], (20, 8), facecolor = '#1f78b4')
plt.broken_barh([(60, 90), (190, 20), (230, 30), (280, 60)], (10, 8), facecolor = ('#7fb97e', '#beaed0', '#fdc089', '#ffff69'))
plt.xlim(0, 360)
plt.ylim(5, 35)
plt.xlabel('演出时间')
plt.xticks(np.arange(0, 361, 60))
plt.yticks([15, 25], ['电影院A', '电影院B'])
plt.grid(ls = '--', lw = 1, color = 'gray', alpha = 0.3)
plt.title('不同地区歌剧院的演出时间比较')
plt.show()

3.2 阶梯图

阶梯图经常使用在时间序列数据的可视化任务中,凸显时序数据的波动周期和规律。

代码如下:

代码语言:javascript
复制
x = np.linspace(1, 10, 10)
y = np.sin(x)
plt.step(x, y, color = '#8dd3cf', where = 'pre', lw = 2)
plt.xlim(0, 11)
plt.xticks(np.arange(0, 11, 1))
plt.ylim(-1.2, 1.2)
plt.show()

语句的where参数指定了绘制的水平直线与相邻数据点的关系,默认为pre,表示x轴上的每个数据点对应y轴上的数值向左侧绘制水平直线直到x轴上的此数据点的左侧相邻数据点为止。也可以取值为post,则是按照左闭右开进行选取。

代码语言:javascript
复制
plt.step(x, y, color = '#8dd3cf', where = 'post', lw = 2)

4 饼图

饼图主要用来展示定性数据比例分布特征的统计图形。

4.1 分裂式饼图

代码如下:

代码语言:javascript
复制
labels = ['A难度水平', 'B难度水平', 'C难度水平', 'D难度水平']
students = [0.35, 0.15, 0.2, 0.3]
colors = ['#00ffff', '#4daf4b', '#793ee3', '#ff7f19']
explode = [0.1, 0.1, 0.1, 0.1]
plt.pie(students, explode = explode, labels = labels, autopct = '%3.1f%%', startangle = 45, shadow = True, colors = colors)
plt.title('不同试卷的学生选择占比')
plt.show()

其中explode可以控制分裂的大小,即离中心的远近。

4.2 非分裂式饼图

与分裂式饼图相比,仅仅缺少了一个explode参数。

代码如下:

代码语言:javascript
复制
plt.pie(students, labels = labels, autopct = '%3.1f%%', startangle = 45, shadow = True, colors = colors)

4.3 内嵌环式饼图

内嵌环式饼图可以实现多组数据集的比例分布情况,充分发挥饼图作为统计图形的展示效果。

代码如下:

代码语言:javascript
复制
time = ['游戏', '吃饭', '睡觉', '学习', '其他']
weight1 = [30, 5, 35, 20, 10]
weight2 = [3, 10, 25, 50, 12]
colormap = ['#00ffff', '#4daf4b', '#793ee3', '#ff7f19', '#3773b8']
inner_colors = colormap
outer_colors = colormap
wedges1, texts1, autotexts1 = plt.pie(weight1, autopct = '%3.1f%%', radius = 1, pctdistance = 0.85, colors = inner_colors,
                                     textprops = dict(color = '#000000'), wedgeprops = dict(width = 0.3, edgecolor = 'w'))
wedges2, texts2, autotexts2 = plt.pie(weight2, autopct = '%3.1f%%', radius = 0.7, pctdistance = 0.75, colors = outer_colors,
                                     textprops = dict(color = '#000000'), wedgeprops = dict(width = 0.3, edgecolor = 'w'))
plt.legend(wedges1, time, fontsize = 12, title = '日常类别', loc = 'best', bbox_to_anchor = (0.91, 0, 0.3, 1))
plt.setp(autotexts1, size = 12, weight = 'bold')
plt.setp(autotexts2, size = 12, weight = 'bold')
plt.setp(texts1, size = 12)
plt.title('不同学生的时间分配')
plt.show()

代码中textprops可以设置字体属性;wedgeprops可以设置环的大小和边缘颜色,具体可以在网上详查。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python数据可视化之美 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

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