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
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 首先,需要安装matplotlib库,在命令行中输入pip install matplotlib即可安装。 然后,在代码中导入matplotlib库: ``` import matplotlib.pyplot as plt ``` 读取文件的方式有很多种,这里以读取csv文件为例: ``` import csv x = [] y = [] # 使用csv模块读取数据 with open('data.csv', 'r') as csv_file: csv_reader = csv.reader(csv_file) # 跳过表头 next(csv_reader) for row in csv_reader: x.append(int(row[0])) y.append(int(row[1])) ``` 然后,使用matplotlib的plot函数绘制折线图: ``` plt.plot(x, y) plt.show() ``` 如果需要保存图片,可以使用savefig函数: ``` plt.savefig('figure.png') ``` 注意:上面的代码假设数据文件是这样的: ``` x,y 1,2 2,3 3,4 4,5 5,6 ``` 这是一个简单的例子,关于matplotlib的用法还有很多其他细节,详情可以参考官方文档:https://matplotlib.org/stable/index.html ### 回答2: Python可以使用matplotlib库读取文档并绘制折线图。 首先,需要安装matplotlib库。在命令行中输入以下命令: pip install matplotlib 安装完成后,在Python的脚本中引入matplotlib库: import matplotlib.pyplot as plt 接下来,需要读取文档中的数据。假设文档中的数据是一组x和y的坐标点,可以使用以下代码读取: x = [] y = [] with open('data.txt', 'r') as file: lines = file.readlines() for line in lines: values = line.split() # 假设数据以空格分隔 x.append(float(values[0])) # 假设x数据在第一列 y.append(float(values[1])) # 假设y数据在第二列 读取完成后,就可以使用matplotlib绘制折线图了。以下是一个简单的绘制折线图的例子: plt.plot(x, y) plt.xlabel('X') plt.ylabel('Y') plt.title('折线图') plt.show() 通过调用plt.plot()函数,传入x和y坐标数据,可以绘制出折线图。接着,可以使用plt.xlabel()和plt.ylabel()设置横轴和纵轴的标签,使用plt.title()设置图表的标题。最后,通过调用plt.show()显示绘制的折线图。 以上就是使用matplotlib库读取文档并绘制折线图的简单步骤。根据具体的需求和文档格式,还可以进行一些适当的调整和修改。 ### 回答3: Python使用matplotlib库可以读取文档中的数据,并根据这些数据绘制折线图。 首先,需要导入matplotlib库和相关的模块。一般来说,我们会使用`pyplot`模块绘制图表,还有其他一些模块用于设置图表的样式、标签等。 接下来,我们需要读取包含数据的文档。可以使用Python的文件操作函数来读取文档,例如`open()`函数。 读取文档后,需要将数据解析成可供绘图使用的格式。常见的方式是使用`csv`模块来处理包含逗号分隔数据的文档,或者使用`pandas`库来处理包含表格数据的文档。 一旦数据被解析出来,我们可以使用`plot()`函数绘制折线图。`plot()`函数接受两个参数,分别是X轴和Y轴的数据。根据需要,可以使用其他的参数来设置折线的样式、标签等。 绘制完折线图后,可以使用`show()`函数来展示图表。此时,可以对图表进行额外的设置,例如添加标题、X轴和Y轴标签,设置坐标轴的范围、刻度等。 最后,使用`savefig()`函数可以将绘制的折线图保存为图片,方便进一步使用或分享。 总之,Python使用matplotlib库读取文档并绘制折线图的基本流程是导入库和模块、读取文档、解析数据、绘制折线图、展示并设置图表,可以根据具体需求和数据格式进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虫无涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值