Python使用Matplotlib模块的pie()函数实现绘制饼形图

 更新时间:2023年11月16日 10:34:46   作者:虫无涯  
这篇文章主要为大家详细介绍了 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使用Matplotlib模块的pie()函数实现绘制饼形图的详细内容,更多关于Python Matplotlib饼形图的资料请关注脚本之家其它相关文章!

相关文章

  • 关于tf.nn.dynamic_rnn返回值详解

    关于tf.nn.dynamic_rnn返回值详解

    今天小编就为大家分享一篇关于tf.nn.dynamic_rnn返回值详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 如何在python中使用openpyxl库读写Excel.xlsx文件(有参考列程)

    如何在python中使用openpyxl库读写Excel.xlsx文件(有参考列程)

    这篇文章主要给大家介绍了关于如何在python中使用openpyxl库读写Excel.xlsx文件的相关资料,openpyxl是一个第三方库,可以处理xlsx格式的Excel文件,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • Python  中的pass语句语法详析

    Python  中的pass语句语法详析

    这篇文章主要介绍了Python 中的pass语句语法详析,pass是一种空操作(null operation),解释器执行到它的时候,除了检查语法是否合法,什么也不做就直接跳过
    2022-07-07
  • Python分治法定义与应用实例详解

    Python分治法定义与应用实例详解

    这篇文章主要介绍了Python分治法定义与应用,较为详细的分析了Python分治法的概念、原理、用途,并结合实例总结了Python分治法的各种常见应用,需要的朋友可以参考下
    2017-07-07
  • Python实现查看系统启动项功能示例

    Python实现查看系统启动项功能示例

    这篇文章主要介绍了Python实现查看系统启动项功能,涉及Python针对系统注册表启动项的相关读取操作实现技巧,需要的朋友可以参考下
    2018-05-05
  • 用python实现刷点击率的示例代码

    用python实现刷点击率的示例代码

    今天小编就为大家分享一篇用python实现刷点击率的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python pyecharts实时画图自定义可视化经纬度热力图

    Python pyecharts实时画图自定义可视化经纬度热力图

    这篇文章主要为大家介绍了Python pyecharts实时画图自定义经纬度热力图实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Pandas.DataFrame重置列的行名实现(set_index)

    Pandas.DataFrame重置列的行名实现(set_index)

    本文主要介绍了Pandas.DataFrame重置列的行名实现(set_index),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python数据处理pandas读写操作IO工具CSV解析

    Python数据处理pandas读写操作IO工具CSV解析

    这篇文章主要为大家介绍了Python pandas数据读写操作IO工具之CSV使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • tkinter如何实现label超链接调用浏览器打开网址

    tkinter如何实现label超链接调用浏览器打开网址

    这篇文章主要介绍了tkinter如何实现label超链接调用浏览器打开网址问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01

最新评论