Python利用Matplotlib库实现绘制饼形图
作者:侯小啾 发布时间:2021-08-13 11:08:51
1.plt.pie()
饼图 常常用来显示 整体中各部分所占的比例,在python-matplotlib库中通过plt.pie()方法来实现。
其主要参数如下:
x --------每一块饼图的比例组成的序列。可以是一个列表。如果其中元素的值加起来大于一,则会通过
归一化处理后的结果。
explode -------- 指每一块饼距离圆心的距离。默认为0。如果大于0,则饼即会分裂出来,即“分裂饼形图”效果。
labels -------- 标签,即每一块饼图外侧显示的说明文字
autopct -------- 设置饼图百分比的格式。即字符串的格式,可以使用格式化字符串表达式或者format()函数的表达式。 不设定这个参数则不会显示百分比的字符串。
pctdistance --------指百分比的位置刻度,默认为0.6。
shadow --------布尔类型,饼图是否带阴影(立体感)。默认False不带。
labeldistance --------标记的绘制的位置,占半径长度的比例。默认为1.1,如果大于1则显示在饼的内侧。
startangle --------起始绘制角度,默认从x轴正方向逆时针画起。例如,设置为90则从y轴正方向画起。
radius -------- 饼图的半径,默认为1。
counterclock -------- 指针方向。布尔类型。默认为True,表示逆时针。如果为False则表示顺时针。
wedgeprops -------- wedge对象的属性(wedge翻译过来即三角木,楔子,即表示饼图中的每一块儿),可选参数,字典类型,默认为None。这个字典将会传递给wedge对象。如wedgeprops={‘linewidth’:2}表示wedge的线条宽度为2。
textprops -------- text标签文本的属性。也是一个字典类型,可选。默认为None。
center -------- 饼图的原点。
frame -------- 是否显示轴框架,布尔类型,默认不显示,False。如果为True则会显示轴框架。可以与grid()配合使用。通常不使用该参数,因为轴框架会干扰图像效果。
rotatelabels -------- 可选,旋转标签到指定角度。(“指定”的含义是,以该位置连接圆心的半径为水平基准。) 
2. 饼图基本
绘制一张简单的饼图,图像上的百分数显示出一位小数。标签为[‘A类’, ‘B类’, ‘C类’, ‘D类’]。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.facecolor'] ='#cc00ff'
x = [10, 20, 35, 25]
plt.pie(x, autopct='%1.1f%%', labels=['A类', 'B类', 'C类', 'D类'])
plt.title("产品数量占比")
plt.show()
图像效果呈现如下:
3. 饼状图进阶
设置背景颜色为’#00E5EE’,
百分数显示一位小数,
四块的颜色依次为[‘red’, ‘green’, ‘purple’, ‘yellow’]
B类 在饼图中 向外分裂0.2个单位  explode=[0, 0.2, 0, 0],
从y轴正方向开始绘图  startangle=90,
饼图半径设为1.1  radius=1.1,
标签文本字体的大小为20,颜色为 ‘#8B1A1A’    textprops={‘fontsize’: 20, ‘color’: ‘#8B1A1A’}
显示阴影效果,
标签在半径0.6单位处    pctdistance=0.6,
每个标签都选择一定的角度   rotatelabels=True
代码如下:
import matplotlib.pyplot as plt
fig = plt.figure(1, facecolor='#00E5EE', figsize=(10, 8))
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.facecolor'] = '#cc00ff'
x = [10, 20, 35, 25]
plt.pie(x,
labels=['A类', 'B类', 'C类', 'D类'],
autopct='%1.1f%%',
colors=['red', 'green', 'purple', 'yellow'],
explode=[0, 0.2, 0, 0],
startangle=90,
radius=1.1,
textprops={'fontsize': 20, 'color': '#8B1A1A'},
shadow=True,
pctdistance=0.6,
rotatelabels=True
)
# 设置标题文本、y坐标(即竖直方向上的位置),字体大小、颜色
plt.title("产品数量占比", y=1.05, fontsize=25, color='#cc00ff')
plt.show()
4. 环形图
绘制环形图仍然使用plt.pie()方法,
只需要设置其中的wedgeprops参数的属性。
代码示例如下
在上例代码的基础上,取消分裂,
添加 wedgeprops={‘width’: 0.4, ‘edgecolor’: ‘k’}。
然后把百分数的位置pctdistance设置为0.8。
import matplotlib.pyplot as plt
fig = plt.figure(1, facecolor='#00E5EE', figsize=(10, 8))
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.facecolor'] = '#cc00ff'
x = [10, 20, 35, 25]
plt.pie(x,
labels=['A类', 'B类', 'C类', 'D类'],
autopct='%1.1f%%',
colors=['red', 'green', 'purple', 'yellow'],
startangle=90,
radius=1.1,
textprops={'fontsize': 20, 'color': '#8B1A1A'},
shadow=True,
pctdistance=0.8,
rotatelabels=True,
wedgeprops={'width': 0.4, 'edgecolor': 'k'}
)
plt.title("产品数量占比", y=1.05, fontsize=25, color='#cc00ff')
plt.show()
5. 内嵌环形图
内嵌环形图,以内嵌一次为例。即两个圆环,需要调用两次plt.pie()方法。
通过wedgeprops参数设置不同的环形边界,通过radius设置不同的半径。
全局字体为SimHei(黑体)。标题部分的局部字体使用“华文琥珀”(将系统的字体文件STHUPO.TTF复制到当前目录下)。
import matplotlib.pyplot as plt
from matplotlib import font_manager
fig = plt.figure(1, facecolor='#ffffcc', figsize=(6, 6))
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.facecolor'] = '#cc00ff'
x1 = [10, 20, 35, 25]
x2 = [8, 32, 20, 40]
plt.pie(x1,
autopct='%1.1f%%',
colors=['red', 'green', 'blue', 'yellow'],
startangle=90,
radius=1,
textprops={'fontsize': 16, 'color': 'purple'},
pctdistance=0.85,
rotatelabels=True,
wedgeprops={'linewidth': 2, 'width': 0.3, 'edgecolor': 'k'}
)
plt.pie(x2,
autopct='%1.1f%%',
colors=['red', 'green', 'blue', 'yellow'],
startangle=90,
radius=0.7,
textprops={'fontsize': 16, 'color': 'purple'},
pctdistance=0.6,
rotatelabels=True,
wedgeprops={'linewidth': 2, 'width': 0.4, 'edgecolor': 'k'}
)
plt.title("产品数量占比", fontsize=25, color='purple', fontproperties=font_manager.FontProperties(fname='STHUPO.TTF'))
plt.legend(['A类', 'B类', 'C类', 'D类'], bbox_to_anchor=(0.9, 0.2))
plt.show()
程序执行效果如下:
来源:https://blog.csdn.net/weixin_48964486/article/details/124104024
猜你喜欢
- 今天在测试一个pytorch代码的时候显示显存不足,但是这个网络框架明明很简单,用CPU跑起来都没有问题,GPU却一直提示out of me
- 解决vscode终端输出中文乱码问题,强推方法二,少走几年弯路解决网上终端chcp65001仍然无效,或者vscode由utf-8改为GBK
- 本文实例为大家分享了如何利用Python对数据库的增删改查进行简单的封装,供大家参考,具体内容如下1.insert &
- MySQL的数据库管理工具非常多,有哪些优秀的GUI工具可以帮助提高工作效率?不妨看一看这5个MySQL GUI工具。1、Navicat f
- 一、DAFONT 英文字体很多,分类很详细,字体多数都是免费,唯一的缺点中文字体少了些.http://www.dafont.co
- 2020年11月22日最新分享pycharm激活码,这次分享的pycharm激活码适用pycharm2020最新版及pycharm2019、
- max找出tensor 的行或者列最大的值:找出每行的最大值:import torchoutputs=torch.FloatTensor([
- MySQL 序列 AUTO_INCREMENT详解及实例代码MySQL序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段
- 通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,
- 约定:import pandas as pdimport numpy as npfrom numpy import nan as NaN填充
- 1.路径符号的含义 src="/js/jquery.js"、"../"这个斜杠是绝对路径的意思,表示
- 很多时候,设计师们都会通过各种渠道去了解用户的需求,然而从这些渠道反馈回来的信息大部分只是用户的期望并不是真正的用户需求,但是很多时候这些期
- 网站 首页页面宽度 px Yahoo! 950 淘宝 950 MySpace 960 新浪 950 网易 960 Live Search 9
- 面向对象的程序设计随着程序的设计的复杂性增加,结构化程序设计方法又不够用了。不够用的根本原因是“代码重用”的时候不方便。面向对象的方法诞生了
- 一、目录权限设置很重要:可以有效防范黑客上传木马文件. 如果通过 chmod 644 * -R 的话,php文件就没有权限访问了。 如果通过
- 一、读取Excel文件使用pandas的read_excel()方法,可通过文件路径直接读取。注意到,在一个excel文件中有多个sheet
- DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)这些函
- 虽然ting88没有注册的用户不能下载歌曲,但搞定它也非难事啊:)进入www.ting88.com的网站,把歌手专辑页面的URL复制到文本框
- 最长公共子序列python实现,最长公共子序列是动态规划基本题目,下面按照动态规划基本步骤解出来。1.找出最优解的性质,并刻划其结构特征序列
- 前言最近在开发行为验证码,经常触及到关于验证类型的相关内容。但使用起来不太熟练,闲暇之余,总结一下我对行为验证码验证类型的理解。验证类型概述