使用Matplotlib提供的pie()函数绘制饼图

一、环境准备

  • python

  • pip install matplotlib

二、pie()函数常见参数

1. 基本绘制
import matplotlib.pyplot as plt
values = [10,20,30]
plt.pie(values)
plt.show()
2. 参数:explode

意义:分离饼状图,突出强调某一部分;
默认:None;
调用:explode=[0, 0, 0.2, 0]

3. 参数:labels

意义:给各个部分添加标签;
默认:None;
调用:labels=[‘A’, ‘B’, ‘C’, ‘D’]

4. 参数:labeldistance

意义:标签距离饼状图的距离;
默认:1.1;
调用:labeldistance = float(实数)

5. 参数:colors

意义:设置每一部分的颜色;
默认:自动填充;
调用:colors=[‘red’, ‘gray’, ‘yellow’, ‘blue’]
注意:颜色个数必须等于values中数据的个数

6. 参数:autopct

意义:显示各部分比例,保留小数位数;
默认:None;
调用:autopct=’%1.2f%%’

7. 参数:shadow

意义:阴影,增加立体感;
默认:False;
调用:shadow=True

三、实例

以下是读取CSV文件中的数据,并绘制成饼图的一个简单实例,主要就是对pie()函数的使用.


# 加载数据分析常用库
import csv
import matplotlib.pyplot as plt

filename = r'D:learnprojectreptilejob.csv'
with open(filename) as f:
    # 创建阅读器,调用csv.reader()将前面存储的文件对象作为实参传给他
    reader = csv.reader(f)
    # 调用next()一次,将文件的第一行存储在header_now中
    header_now = next(reader)


    # 根据索引提取公司名称及薪资范围,并存储在列表中
    money = []
    for row in reader:
        money.append(row[2])

    """
    从获取的薪资范围列表中分别提取出每个公司给出的最低薪资和最高薪资,
    并将提取到的字符串转化为float格式存储
    """
    # 设置变量
    one = 0
    two = 0
    three = 0
    four = 0
    five = 0

    listlow, listhigh = [],[]
    for m in money:
        num = m.split('-')  # 通过‘-’分割
        low = num[0]  # 提取最低薪资
        high = num[1].split('万/月')[0] # 提取最高薪资,并将后缀单位去除
        # 转化数据格式为float
        lows = float(low)
    # 这一块写的有点繁琐,后续需要优化下,提高代码复用性
        if lows in (0, 1):
            one += 1
        elif lows in (1, 1.5):
            two += 1
        elif lows in (1.5, 2):
            three += 1
        elif lows in (2, 2.5):
            four += 1
        elif lows >= 2.5:
            five += 1

        highs = float(high)
        if highs in (0, 1):
            one += 1
        elif highs in (1, 1.5):
            two += 1
        elif highs in (1.5, 2):
            three += 1
        elif highs in (2, 2.5):
            four += 1
        elif highs >= 2.5:
            five += 1


    """
    
    绘制饼图
    
    """
    # 用来正常显示中文标签
    plt.rcParams['font.sans-serif'] = ['SimHei']
    # 图标描述
    labels = ['0-1万/月','1-1.5万/月','1.5-2万/月','2~2.5万/月','2.5+ 万/月']
    # 对应变量
    values = [one,two,three,four,five]
    # 旋转角度,将排在第二位的薪资分离出来,突出显示
    explode = [0,0.05,0,0,0]

    # 自定义图例颜色
    colors = ['orange','pink','b','g','red']

    # 图表题目
    plt.title("上海市软件测试薪资分布",fontsize = 16,pad=15)

     # 各项属性
    plt.tick_params(axis='both', which='major', labelsize=26)
    """
    # autopct='%1.1f%% 设置百分比,保留两位小数
    # pctdistance=0.8, #设置百分比标签和圆心的距离
    # startangle=180 设置饼图的初始角度
    """
    plt.pie(values, labels=labels, colors=colors,pctdistance=0.6,explode = explode ,startangle=180, shadow=True, autopct='%0.2f%%')
    # 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
    plt.axis('equal')

    # 不显示边框
    plt.gca().spines['right'].set_color('none')
    plt.gca().spines['top'].set_color('none')
    plt.gca().spines['left'].set_color('none')
    plt.gca().spines['bottom'].set_color('none')
    # 保存图片
    # plt.savefig('D:\learn\salary.png')

    # 显示图片
    plt.show()


显示效果图:

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/xyxuan/p/14890833.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!