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()
  • 效果显示:
    在这里插入图片描述
目录
相关文章
|
4天前
|
机器学习/深度学习 搜索推荐 数据可视化
Python量化炒股常用的Matplotlib包
Python量化炒股常用的Matplotlib包
19 7
|
4天前
|
JSON API 数据格式
30天拿下Python之requests模块
30天拿下Python之requests模块
16 7
|
2天前
|
数据可视化 数据挖掘 API
Python中的数据可视化利器:Matplotlib与Seaborn对比解析
在Python数据科学领域,数据可视化是一个重要环节。它不仅帮助我们理解数据,更能够让我们洞察数据背后的故事。本文将深入探讨两种广泛使用的数据可视化库——Matplotlib与Seaborn,通过对比它们的特点、优劣势以及适用场景,为读者提供一个清晰的选择指南。无论是初学者还是有经验的开发者,都能从中找到有价值的信息,提升自己的数据可视化技能。
|
3天前
|
Python
python函数进阶
python函数进阶
|
3天前
|
安全 Python
Python量化炒股的获取数据函数—get_industry()
Python量化炒股的获取数据函数—get_industry()
10 3
|
3天前
|
人工智能 数据可视化 搜索推荐
Python异常模块与包
Python异常模块与包
|
3天前
|
Python
Python sorted() 函数和sort()函数对比分析
Python sorted() 函数和sort()函数对比分析
|
3天前
|
Python
Python量化炒股的获取数据函数—get_security_info()
Python量化炒股的获取数据函数—get_security_info()
10 1
|
3天前
|
Linux Python Windows
一个Python模块Pendulum的问题
一个Python模块Pendulum的问题
|
3天前
|
Python
Python量化炒股的获取数据函数— get_billboard_list()
Python量化炒股的获取数据函数— get_billboard_list()
下一篇
无影云桌面