• 第五章. 可视化数据分析分析图表—常用图表的绘制2—直方图,饼形图


    第五章. 可视化数据分析图

    5.3 常用图表的绘制2—直方图,饼形图

    本节主要介绍常用图表的绘制,主要包括直方图,饼形图。

    1.直方图(matplotlib.pyplot.hist)

    直方图,又称质量分布图,一般用横轴表示数据类型,纵轴表示分布情况。直方图是数值数据分布的精确图形表示,是一个连续变量(定量变量)的概率分布估计。

    1).语法:

    matplotlib.pyplot.hist(x,bins=None,range=None,density=False,bottom=None,histtype='bar',align='mid',log=False, color=None,label=None,stacked=False,normed=None)
    
    • 1

    参数说明:
    x:数据集,最终的直方图将对数据集进行统计
    bins:统计数据间区分布情况
    range:元组类型,显示的区间
    density:是否显示频率统计结果,默认None,True:显示频率统计结果=区间数目/(总数*区间宽度)
    histtype:可选参数:bar(默认值),barstacked,step( 使用梯形),stepfilled(对梯形内部进行填充)
    align:控制柱状图的水平分布,可选参数:mid(默认值),left,right
    log:y坐标轴是否选择指数刻度
    stacked:是否为堆积状图

    2).示例:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    pd.set_option('display.unicode.east_asian_width', True)
    df = pd.read_excel('F:\\Note\\清单.xlsx', sheet_name='Sheet4')
    print(df)
    
    # 设置画布
    fig = plt.figure(figsize=(6, 4), facecolor='y')
    
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
    plt.rcParams['axes.unicode_minus'] = False  # 解决负号不显示的问题
    
    # X,Y轴刻度线的显示方向
    plt.rcParams['xtick.direction'] = 'in'
    plt.rcParams['ytick.direction'] = 'in'
    
    # 画直方图
    plt.hist(df['语文'], bins=range(0, 150, 25), facecolor='c', edgecolor='black', alpha=0.7)  # alpha:透明度
    
    # 设置网格线
    plt.grid(color='0.5', linestyle='--', linewidth=1)
    
    # 设置x,y轴坐标
    plt.xlabel('分数')
    plt.ylabel('学生数量')
    
    # 设置坐标轴刻度
    plt.xticks(range(0, 150, 25))
    
    # 设置标题和图例
    plt.title('成绩统计表')
    
    # 设置图标图例
    plt.legend(['语文'],
               loc='upper right')  # 手动添加图例时,有时文本会显示不全,在文本后面加一个逗号(,)可解决,例如('图书采购价目',)
    
    # 调整图表与画布边缘间距
    plt.subplots_adjust(left=0.15, bottom=0.15, right=0.9, top=0.9)
    
    # 坐标轴的刻度线向内显示还是向外显示
    plt.tick_params(left=True, bottom=True, right=False, top=False)
    
    # 显示图像
    plt.show()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    清单.xlsx表格中的数据
    在这里插入图片描述

    结果展示:
    在这里插入图片描述

    2.饼形图(matplotlib.pyplot.pie)

    饼形图常用来显示各个部分在整体中所占的比例。

    1).语法:

    matplotlib.pyplot.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, hold=None, data=None)
    
    • 1

    参数说明:
    x:每一块饼形图的比例,如果sum(x)>1,会使用sum(x)进行归一化
    explode:每一块饼形图离中心的距离
    labels:每一块饼形图外侧显示的说明文字
    colors:每个冰块的颜色。类数组结构。颜色会循环使用。默认值为None,使用当前色彩循环。
    autopct:设置饼图百分比,可以使用格式化字符串或format函数,如‘%.2f’:保留小数点后两位
    pctdistance:指定百分比的位置刻度,默认为0.6
    shadow:饼图下是否有阴影。布尔值。默认值为False。
    labeldistance:标记的绘制位置,相当于,相对于radius的比例,默认值:1.1,<1:绘制在饼图的内侧
    startangle:饼块起始角度。浮点数。默认值为0,即从x轴开始。角度逆时针旋转。
    radius:饼图半径。浮点数。默认值为1.
    counterclock:角度是否逆时针旋转。布尔值。默认值为True。
    wedgeprops:饼块属性,字典类型,字典传递给wedge对象用来画一个饼图,例如wedgeprops={‘linewidth’: 2},设置线宽为2
    textprops:设置标签和比例文字的格式,字典类型
    center:饼图中心坐标。(float,float)浮点数二元组。默认值为(0,0)。
    frame:是否绘制子图边框。布尔值。默认为False。
    rotatelabels:True:旋转到每个标签到指定的角度,默认为False。

    2).示例:

    清单.xlsx表格中的数据
    在这里插入图片描述

    • 示例1:基础饼形图
    import pandas as pd
    import matplotlib.pyplot as plt
    
    pd.set_option('display.unicode.east_asian_width', True)
    df = pd.read_excel('F:\\Note\\清单.xlsx', sheet_name='Sheet1')
    print(df)
    
    # 设置画布
    fig = plt.figure(figsize=(6, 4), facecolor='white')
    
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
    plt.rcParams['axes.unicode_minus'] = False  # 解决负号不显示的问题
    
    labels = ['VDA听者文摘', '疯狂英语900句', '小狗钱钱', '汤姆·索亚历险记', '母亲']
    # 基础饼形图
    plt.pie(df['销量占比'], labels=df['收货地址(省)'], labeldistance=1.1, autopct='%.2f%%', startangle=90, radius=0.8,
            center=(0, 0), textprops={'fontsize': 9, 'color': 'k'}, pctdistance=0.6)
    
    # 设置标题和图例
    plt.title('销量')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    结果展示:
    在这里插入图片描述

    • 示例2:分裂饼形图
    import pandas as pd
    import matplotlib.pyplot as plt
    
    pd.set_option('display.unicode.east_asian_width', True)
    df = pd.read_excel('F:\\Note\\清单.xlsx', sheet_name='Sheet1')
    print(df)
    
    # 设置画布
    fig = plt.figure(figsize=(6, 4), facecolor='white')
    
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
    plt.rcParams['axes.unicode_minus'] = False  # 解决负号不显示的问题
    
    labels = ['VDA听者文摘', '疯狂英语900句', '小狗钱钱', '汤姆·索亚历险记', '母亲']
    
    
    # 分裂饼形图
    explode = [0, 0, 0, 0, 0.1]
    plt.pie(df['销量占比'], labels=df['收货地址(省)'], explode=explode, labeldistance=1.1, autopct='%.2f%%', startangle=90,
            radius=0.8, center=(0, 0), textprops={'fontsize': 9, 'color': 'k'}, pctdistance=0.6)
    
    # 设置标题和图例
    plt.title('销量')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    结果展示:
    在这里插入图片描述

    • 示例3:立体感带阴影的饼形图
    import pandas as pd
    import matplotlib.pyplot as plt
    
    pd.set_option('display.unicode.east_asian_width', True)
    df = pd.read_excel('F:\\Note\\清单.xlsx', sheet_name='Sheet1')
    print(df)
    
    # 设置画布
    fig = plt.figure(figsize=(6, 4), facecolor='white')
    
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
    plt.rcParams['axes.unicode_minus'] = False  # 解决负号不显示的问题
    
    labels = ['VDA听者文摘', '疯狂英语900句', '小狗钱钱', '汤姆·索亚历险记', '母亲']
    
    # 立体感带阴影的饼形图
    explode = [0, 0, 0, 0, 0.1]
    plt.pie(df['销量占比'], labels=df['收货地址(省)'], explode=explode, labeldistance=1.1, autopct='%.2f%%', startangle=90,shadow=True,
            radius=0.8, center=(0, 0), textprops={'fontsize': 9, 'color': 'k'}, pctdistance=0.6)
    
    # 设置标题和图例
    plt.title('销量')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    结果展示:
    在这里插入图片描述

    • 示例4:环形图
    import pandas as pd
    import matplotlib.pyplot as plt
    
    pd.set_option('display.unicode.east_asian_width', True)
    df = pd.read_excel('F:\\Note\\清单.xlsx', sheet_name='Sheet1')
    print(df)
    
    # 设置画布
    fig = plt.figure(figsize=(6, 4), facecolor='white')
    
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
    plt.rcParams['axes.unicode_minus'] = False  # 解决负号不显示的问题
    
    labels = ['VDA听者文摘', '疯狂英语900句', '小狗钱钱', '汤姆·索亚历险记', '母亲']
    
    # 环形图
    plt.pie(df['销量占比'], labels=df['收货地址(省)'], labeldistance=1.1, autopct='%.2f%%', startangle=90,
            shadow=True,radius=0.8, wedgeprops={'width':0.2}, center=(0, 0), textprops={'fontsize': 9, 'color': 'k'}, pctdistance=0.6)
    
    # 设置标题和图例
    plt.title('销量')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    结果展示:
    在这里插入图片描述

    • 示例5:内嵌环形图
      绘制内嵌环形注意事项
      • 连续两次使用pie函数
      • 通过wedgeprops参数设置环形边界
      • 通过radius参数设置不同的半径

    代码:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    pd.set_option('display.unicode.east_asian_width', True)
    df = pd.read_excel('F:\\Note\\清单.xlsx', sheet_name='Sheet1')
    print(df)
    
    # 设置画布
    fig = plt.figure(figsize=(6, 4), facecolor='white')
    
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
    plt.rcParams['axes.unicode_minus'] = False  # 解决负号不显示的问题
    
    labels = ['VDA听者文摘', '疯狂英语900句', '小狗钱钱', '汤姆·索亚历险记', '母亲']
    
    # 内嵌环形图
    # 内环
    plt.pie(df['折扣率'],  labeldistance=1.1, autopct='%.2f%%', startangle=90,
            shadow=True, radius=0.6, wedgeprops={'width': 0.2}, center=(0, 0), textprops={'fontsize': 9, 'color': 'k'},
            pctdistance=0.6)
    
    # 外环
    plt.pie(df['销量占比'],labeldistance=1.1, autopct='%.2f%%', startangle=90,
            shadow=True, radius=0.8, wedgeprops={'width': 0.2}, center=(0, 0), textprops={'fontsize': 9, 'color': 'k'},
            pctdistance=0.8)
    
    # 设置标题和图例
    plt.title('销量')
    
    # 设置图标图例
    plt.legend(df['收货地址(省)'], title='省份',
               loc='upper right', frameon=False, bbox_to_anchor=(1.3, 1.1))  # 手动添加图例时,有时文本会显示不全,在文本后面加一个逗号(,)可解决,例如('图书采购价目',)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    结果展示:
    在这里插入图片描述

    注意:代码中所涉及到的函数和参数,在图表的常用设置1图表的常用设置2 有所介绍

  • 相关阅读:
    【JVM笔记】方法区的演进细节
    ssm+java+vue基于微信小程序的智能停车场管理系统#毕业设计
    从零实现带RLHF的类ChatGPT:逐行解析微软DeepSpeed Chat
    C++ -- 深入理解多态
    了解一下最新堡垒机jumpserver V3.x
    周记之重新开始
    国内项目管理中级证书CSPM-3正在报名!
    新手用mac电脑,对文件的疑问和gpt回应
    spring5.0源码解析 Aop 02
    案例 | 重新定义“一个人的小酒”,RIO如何微醺营销击中00后的心?
  • 原文地址:https://blog.csdn.net/weixin_45116749/article/details/128182217