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()
  • 效果显示:
    在这里插入图片描述
目录
相关文章
|
1月前
|
Python
Python Internet 模块
Python Internet 模块。
125 74
|
2月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
130 63
|
2月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
2月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
20天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
27 3
|
2月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
1月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
88 8
|
4月前
|
Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
|
4月前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
74 1
|
4月前
|
存储 数据可视化 数据挖掘
揭秘!Matplotlib与Seaborn联手,如何让Python数据分析结果一目了然,惊艳全场?
在数据驱动时代,高效直观地展示分析结果至关重要。Python中的Matplotlib与Seaborn是两大可视化工具,结合使用可生成美观且具洞察力的图表。本文通过分析某电商平台的商品销量数据集,展示了如何利用这两个库揭示商品类别与月份间的销售关系及价格对销量的影响。首先使用Matplotlib绘制月份销量分布直方图,再借助Seaborn的箱线图进一步探索不同类别和价格区间下的销量稳定性。
88 10

热门文章

最新文章