Python如何使用Matplotlib模块的pie()函数绘制饼形图?

简介: 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()函数说明

  • 实现这个功能,主要使用了matplotlibpyplot里的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()
  • 效果显示:
    在这里插入图片描述
目录
相关文章
|
2月前
|
PHP Python
Python format()函数高级字符串格式化详解
在 Python 中,字符串格式化是一个重要的主题,format() 函数作为一种灵活且强大的字符串格式化方法,被广泛应用。format() 函数不仅能实现基本的插入变量,还支持更多高级的格式化功能,包括数字格式、对齐、填充、日期时间格式、嵌套字段等。 今天我们将深入解析 format() 函数的高级用法,帮助你在实际编程中更高效地处理字符串格式化。
174 0
|
2月前
|
索引 Python 容器
[oeasy]python096_列表_计数函数_count
本教程详细介绍了Python中列表的计数方法`count`,包括其基本用法、与`len`函数的区别,以及如何结合索引操作查找和删除特定元素。同时探讨了字符串对象的`count`方法,并通过实例演示了如何统计字符出现次数。
45 7
|
1月前
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。
|
2月前
|
机器学习/深度学习 数据处理 索引
Python内置函数:面试通关的49个秘密武器
本文精选49个Python高频面试内置函数,涵盖数值处理、类型转换、序列操作、字典集合、函数式编程及高级特性,结合真实代码案例解析底层逻辑与应用场景,助你提升开发效率,轻松应对技术面试。
53 0
|
5月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
107 20
|
3月前
|
API Python
Python 的内建函数
Python 的内置函数列表,方便查询使用方法。
|
3月前
|
数据采集 自然语言处理 搜索推荐
Python内置函数ord()详解
`ord()` 是 Python 中用于将单个字符转换为对应 Unicode 码点的核心函数,支持 ASCII、多语言字符及特殊符号。其返回值为整数(范围 0-1114111),适用于字符编码验证、数据清洗、自定义排序、基础加解密等场景。使用时需注意参数长度必须为 1,否则会触发 `TypeError`。结合 `chr()` 函数可实现双向转换,进阶技巧包括多字节字符处理、编码范围检测及字符分类验证等。
|
5月前
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
199 14
|
5月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
109 17
|
5月前
|
开发框架 Java .NET
Python中main函数:代码结构的基石
在Python中,`main`函数是程序结构化和模块化的重要组成部分。它实现了脚本执行与模块导入的分离,避免全局作用域污染并提升代码复用性。其核心作用包括:标准化程序入口、保障模块复用及支持测试驱动开发(TDD)。根据项目复杂度,`main`函数有基础版、函数封装版、参数解析版和类封装版四种典型写法。 与其他语言相比,Python的`main`机制更灵活,支持同一文件作为脚本运行或模块导入。进阶技巧涵盖多文件项目管理、命令行参数处理、环境变量配置及日志集成等。此外,还需注意常见错误如全局变量污染和循环导入,并通过延迟加载、多进程支持和类型提示优化性能。
350 0

热门文章

最新文章

推荐镜像

更多