Python如何使用Matplotlib模块的pie()函数绘制饼形图?
1 模块安装
- 先安装
matplotlib
:
pip install matplotlib
- 安装
numpy
模块,安装matplotlib
时候就已经安装这个依赖了,所以不用装了,当然也可以独立安装: - 安装
pandas
:
pip install numpy
2 实现思路
- 数据存放在
excel
中,对指定数据进行分析,所以需要用到pandas
; - 对指定数据分析后绘制饼形图,需要用到
Matplotlib
模块的pie()
函数; - 对以下指定
excel
内容进行分析; - 分析用户购买区域情况占比,以下数据仅为参考,无真实意义,把以下内容保存为
data.xlsx
:
用户 金额 地址
user001 130.22 重庆
user002 55.64 江苏省
user003 33 江苏省
user004 158.23 重庆
user005 124.56 安徽省
user006 33.26 山东省
user007 59.9 吉林省
user008 34.9 福建省
user009 45.36 山西省
user010 35.23 河南省
user011 123.25 广东省
user012 44.25 河北省
user013 58.26 广东省
user014 83.79 贵州省
user015 59.99 广东省
user016 63.12 福建省
user017 110.78 湖北省
user018 120.21 上海
user019 42.59 山东省
user020 78.99 山西省
user021 1150 浙江省
user022 66 广东省
user023 1256 安徽省
user024 36.3 广东省
user025 54.89 广东省
user026 164.89 广东省
user027 45.78 广东省
user028 126.45 广东省
user029 47.35 河南省
user030 135.79 广东省
user031 159.23 广东省
user032 61.45 广东省
user033 110.41 广东省
user034 298.12 江苏省
user035 102.23 云南省
user036 70.59 上海
user037 159.87 广东省
user038 143.21 浙江省
user039 89.9 广东省
user040 49.9 浙江省
user041 52.3 山东省
user042 89.4 江西省
user043 59.21 北京
user044 37.77 广东省
user045 33.29 广东省
user046 36.19 贵州省
user047 159.9 福建省
user048 49.9 四川省
user049 45.6 广东省
user050 149.8 广东省
3 pie()函数说明
- 实现这个功能,主要使用了
matplotlib
中pyplot
里的pie()
函数; pie()
函数部分源码:
# Autogenerated by boilerplate.py. Do not edit as changes will be lost.
@_copy_docstring_and_deprecators(Axes.pie)
def pie(
x, explode=None, labels=None, colors=None, autopct=None,
pctdistance=0.6, shadow=False, labeldistance=1.1,
startangle=0, radius=1, counterclock=True, wedgeprops=None,
textprops=None, center=(0, 0), frame=False,
rotatelabels=False, *, normalize=None, data=None):
return gca().pie(
x, explode=explode, labels=labels, colors=colors,
autopct=autopct, pctdistance=pctdistance, shadow=shadow,
labeldistance=labeldistance, startangle=startangle,
radius=radius, counterclock=counterclock,
wedgeprops=wedgeprops, textprops=textprops, center=center,
frame=frame, rotatelabels=rotatelabels, normalize=normalize,
**({"data": data} if data is not None else {}))
- 参数说明:
参数 | 说明 |
---|---|
x | 绘图数据 |
explode | 指定饼形图突出显示的部分 |
labels | 饼形图标签说明 |
colors | 饼形图的填充色 |
autopct | 自动添加百分比显示 |
pctdistance | 设置百分比标签与圆心的距离 |
shadow | 是否添加饼形图的阴影效果 |
labeldistance | 设置各扇形标签与圆心的距离 |
startangle | 设置饼形图的初始摆放角度 |
radius | 设置饼图的半径 |
counterclock | 是否让饼图逆时针显示 |
wedgeprops | 设置饼图内外边界的属性,如边界线粗细和颜色 |
textprops | 设置饼图文本属性,如字体大小和颜色 |
center | 饼图的中心点位置,默认原点 |
frame | 是否显示饼形图后的图框 |
4 实现过程
4.1 导入包
import pandas as pd
from matplotlib import pyplot as plt
4.2 定义一个类
- 为了代码整洁和可读性,我们定义过一个类
TestPie():
- 类初始化:
class TestPie():
def __init__(self):
super(TestPie, self).__init__()
4.3 读取数据并处理
# 读取数据
self.data_path = './data.xlsx'
self.data_content = pd.DataFrame(pd.read_excel(self.data_path))
# 获取地址信息
self.address = self.data_content['地址']
self.data_content['省'] = self.address
# 获取序号/地址/金额信息
self.content = self.data_content.groupby(['省'], as_index=False)["金额"].sum().reset_index()
# print(self.content)
# 降序排序
self.content01 = self.content.sort_values(['金额'], ascending=False)
self.content02 = self.content01.head(5) # 读取前5行
4.4 定义饼图绘制方法
- 定义方法:
def test_pic(self):
"""饼形图"""
- 解决中文乱码问题:
# 解决中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
- 设置饼图大小:
# 调节图形大小
plt.figure(figsize=(3, 6))
- 定义标签:
labels = self.content02['省'].values.tolist()
- 设置饼形图每块的值:
sizes = self.content02['金额'].values.tolist()
- 设置饼形图每块的颜色:
colors = ['cyan','darkorange','lawngreen','pink','gold']
- 饼图绘制:
patches, l_text, p_text = plt.pie(sizes,
labels=labels,
colors=colors,
labeldistance=1,
autopct='%.1f%%',
startangle=90,
radius=0.5,
center=(0.3, 0.3),
textprops={'fontsize': 8, 'color': 'k'},
pctdistance=0.7)
- 设置图例,标题等:
# 设置x,y轴刻度一致,这样饼图才能是圆的
plt.axis('equal')
plt.legend(loc='lower left', bbox_to_anchor=(-0.1, 0.8))
plt.title('购买力分析')
5 完整源码
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/15
# 文件名称:test_pie.py
# 作用:Matplotlib模块的pie()函数绘制饼形图
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
import pandas as pd
from matplotlib import pyplot as plt
class TestPie():
def __init__(self):
super(TestPie, self).__init__()
# 读取数据
self.data_path = './data.xlsx'
self.data_content = pd.DataFrame(pd.read_excel(self.data_path))
# 获取地址信息
self.address = self.data_content['地址']
self.data_content['省'] = self.address
# 获取序号/地址/金额信息
self.content = self.data_content.groupby(['省'], as_index=False)["金额"].sum().reset_index()
# print(self.content)
# 降序排序
self.content01 = self.content.sort_values(['金额'], ascending=False)
self.content02 = self.content01.head(5) # 读取前5行
def test_pic(self):
"""饼形图"""
# 解决中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
# 调节图形大小
plt.figure(figsize=(3, 6))
# 定义标签
labels = self.content02['省'].values.tolist()
# 设置饼形图每块的值
sizes = self.content02['金额'].values.tolist()
# 设置饼形图每块的颜色
colors = ['cyan', 'darkorange', 'lawngreen', 'pink', 'gold']
patches, l_text, p_text = plt.pie(sizes,
labels=labels,
colors=colors,
labeldistance=1,
autopct='%.1f%%',
startangle=90,
radius=0.5,
center=(0.3, 0.3),
textprops={'fontsize': 8, 'color': 'k'},
pctdistance=0.7)
plt.axis('equal')
# 显示图例
plt.legend(loc='lower left', bbox_to_anchor=(-0.1, 0.8)
# 添加图标题
plt.title('购买力分析')
plt.grid()
plt.show()
if __name__ == "__main__":
result = TestPie()
result.test_pic()
- 效果显示:
题外话
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
若有侵权,请联系删除