• 直方图,条形图,饼图


    直方图

    在 matplotlib 中,可以通过 plt.hist 函数画直方图

    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    #初始化 NumPy 的随机数,并生成以 5 为中心,宽度为正负 10 的 1000 个符合正态分布的随机数,作为我们画图的数据源
    np.random.seed(100)
    hints = np.random.normal(5, 10, 1000)
    #print(hints.mean(), hints.std())
    
    # 创建画布
    figure1 = plt.figure(figsize = (10, 5))
    figure1.add_subplot(1,1,1)
    
    # 设置轴的属性,轴属性相关的函数都支持fontsize 参数来设置字号
    # 这里我们都设置为 14
    
    plt.xlabel("值", fontsize = 14)
    plt.ylabel("频率", fontsize = 14)
    plt.xticks(fontsize=14)
    plt.yticks(fontsize=14)
    plt.title("正态分布的直方图", fontsize=14)
    
    # 设置画布基本属性:1.显示中文  2.显示负号
    plt.rcParams["font.sans-serif"] = "SimHei"
    plt.rcParams["axes.unicode_minus"] = False
    
    # 画直方图,分10组,用蓝色来画
    plt.hist(hints, bins=10, color=[0,0,1])
    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

    运行后如下
    在这里插入图片描述
    这里我们顺便说下
    bins 的值代表了要把数据分成几组,也就代表了图上一种会有多少个长方形。bins 越大,体现得就越精确,但相应的分布特征可能就越不明显
    比如我们把bin改成50

    在这里插入图片描述
    运行后如下:
    在这里插入图片描述
    可以看到,分组变多后,直方图展示了更多关于原始数据的信息,但是也出现了较多的锯齿,但整体仍然是正态分布的形状

    属性2

    直方图另外一个非常有用的参数就是 edgecolor,即每个长方形的边框颜色
    上面的直方图中间区域是一片蓝,有时候并不利于做进一步的数据分析
    这个时候我们可以设置 plt.hist 函数的 edgecolor 属性,来让每个长方形都有一个边框颜色

    #coding: utf-8
    #date = 2022/9/11
    
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    #初始化 NumPy 的随机数,并生成以 5 为中心,宽度为正负 10 的 1000 个符合正态分布的随机数,作为我们画图的数据源
    np.random.seed(100)
    hints = np.random.normal(5, 10, 1000)
    #print(hints.mean(), hints.std())
    
    # 创建画布
    figure1 = plt.figure(figsize = (10, 5))
    figure1.add_subplot(1,1,1)
    
    # 设置轴的属性,轴属性相关的函数都支持fontsize 参数来设置字号
    # 这里我们都设置为 14
    
    plt.xlabel("值", fontsize = 14)
    plt.ylabel("频率", fontsize = 14)
    plt.xticks(fontsize=14)
    plt.yticks(fontsize=14)
    plt.title("正态分布的直方图", fontsize=14)
    
    # 设置画布基本属性:1.显示中文  2.显示负号
    plt.rcParams["font.sans-serif"] = "SimHei"
    plt.rcParams["axes.unicode_minus"] = False
    
    # 画直方图,分50组,设置长方形的边框颜色是黑色
    plt.hist(hints, bins=50, color=[0,0,1], edgecolor = [0,0,0])
    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

    在这里插入图片描述
    运行后如下

    在这里插入图片描述

    展示多个直方图

    为了模拟多个直方图,我们首先生成另外两个数据源

    #coding: utf-8
    #date = 2022/9/11
    
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    hints = np.random.normal(5, 10, 1000)
    hints_1 = np.random.normal(0, 8, 500)
    hints_2 = np.random.normal(15, 10, 800)
    
    #接下来我们三次调用 plt.hist 即可,为了区分,我们使用三种不同的颜色来画
    # 创建画布
    figure1 = plt.figure(figsize = (10, 5))
    figure1.add_subplot(1,1,1)
    
    # 设置轴的属性,轴属性相关的函数都支持fontsize 参数来设置字号
    # 这里我们都设置为 14
    
    plt.xlabel("值",fontsize = 14)
    plt.ylabel("频率", fontsize = 14)
    plt.xticks(fontsize=14)
    plt.yticks(fontsize=14)
    plt.title("正态分布的直方图", fontsize=14)
    
    # 设置画布基本属性:1.显示中文  2.显示负号
    plt.rcParams["font.sans-serif"] = "SimHei"
    plt.rcParams["axes.unicode_minus"] = False
    
    # 第一个用蓝色,使用 plt.hist 函数的 alpha 属性,来让三个图都有一定的透明度
    plt.hist(hints, bins=50, color=[0,0,1], edgecolor=[0,0,0], alpha = 0.5)
    
    # 第二个用绿色
    plt.hist(hints_1, bins=50, color=[0,1,0], edgecolor=[0,0,0], alpha = 0.5)
    
    # 第三个用红色
    plt.hist(hints_2, bins=50, color=[1,0,0], edgecolor=[0,0,0], alpha = 0.5)
    
    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

    运行如下:

    在这里插入图片描述

    条形图

    条形图,又称为柱状图,有的地方也把横版的称为条形图,竖版的称为柱状图,这里我们统称条形图

    #coding: utf-8
    #date = 2022/9/11
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    math_scores = np.array([71,65,70,96,64])
    chinese_scores = np.array([84,75,68,83,57])
    english_scores = np.array([55,78,76,91,64])
    
    # 创建画布
    figure2 = plt.figure(figsize = (10, 5))
    figure2.add_subplot(1,1,1)
    
    # 设置轴的属性
    plt.xlabel("", fontsize = 14)
    plt.ylabel("平均分", fontsize = 14)
    plt.xticks(fontsize=14)
    plt.yticks(fontsize=14)
    
    plt.title("期中成绩条形图", fontsize=14)
    
    # 设置画布基本属性:1.显示中文  2.显示负号
    plt.rcParams["font.sans-serif"] = "SimHei"
    plt.rcParams["axes.unicode_minus"] = False
    category = ["一班", "二班", "三班", "四班", "五班"]
    
    # 使用 index 数组来代替类别
    index_category = np.arange(len(category))
    # 指定每条条形的宽度
    bar_width = 0.25
    # 指定宽度为 bar_width, 并且绘制在 index - bar_width 的区域,也就是每组图的左边
    plt.bar(index_category - bar_width, chinese_scores, width=bar_width, color=[0,0,1])
    # 指定宽度为 bar_width, 并且绘制在 index 的区域,也就是每组图的中间
    plt.bar(index_category, math_scores, width=bar_width, color=[0,1,0])
    # 指定宽度为 bar_width, 并且绘制在 index + bar_width 的区域,也就是每组图的右边
    plt.bar(index_category + bar_width, english_scores, width=bar_width, color=[1,0,0])
    
    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

    运行如下
    在这里插入图片描述

    饼图

    plt.pie 函数可以绘制饼图
    pie 函数由以下几个关键参数实现功能

    1. x:饼图每一块的占比列表,列表有几个元素就代表饼图分几块
    2. explode:凸出显示,也是一个列表,和 x 一一对应,代表具体某一块是否要凸出显示
    3. colors:列表,和 x 一一对应,代表每一块的颜色
    4. labels:标签文本列表,和 x 一一对应,代表每一块的标题
    5. autopct:代表百分比文本的格式
    6. startangle: 默认饼图是从角度为 0 的位置逆时针开始画,这里可以指定初始角度
    7. labeldistance:文本标签距离饼图的距离
    8. pctdistance:百分比标签距离饼图中心的距离
      假设我们对一个年级的学生,统计历史上得过三好学生称号的情况,完全没得过的占比为 40%, 得过一次的占比为 30%, 二次的为 25%, 三次以上的为 5%。现在我们用饼图表示这个数据,并将得过三次以上的凸出显示
    import matplotlib.pyplot as plt
    
    # 创建画布
    figure5 = plt.figure(figsize = (10, 5))
    figure5.add_subplot(1,1,1)
    
    plt.rcParams["font.sans-serif"] = "SimHei"
    
    plt.rcParams["axes.unicode_minus"] = False
    
    # 设置饼图数据源
    category = ["没有得过", "得过一次", "得过二次", "得过三次以上"]
    size = [40, 30, 25, 5]
    
    # 用四种不同的颜色绘制不同的部分
    color = ["r", "g", "b", "c"]
    
    explode = [0,0,0,0.1]
    
    # 绘制饼图
    plt.pie(size,explode=explode,colors=color,labels=category,labeldistance= 1.1, autopct="%1.1f%%", startangle=90,pctdistance=0.6)
    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

    运行如下:

    在这里插入图片描述

  • 相关阅读:
    .gitignore语法及配置问题
    【深度学习】目标检测的性能评价指标,mAP_0.5,mAP_0.5,0.95,0.05
    理解Go语言中的GOPATH
    【RegNet】《Designing Network Design Spaces》
    自定义iOS注解
    flutter dio 请求封装(空安全)
    IEEE模板使用注意事项
    大厂晋升学习方法一:海绵学习法
    Windows访问centOS的Tomcat
    这八种情形,专利优先审查一律不予推荐!
  • 原文地址:https://blog.csdn.net/qq_41780297/article/details/126809309