Maison  >  Article  >  développement back-end  >  Apprenez à utiliser la visualisation de données Matplotlib

Apprenez à utiliser la visualisation de données Matplotlib

PHPz
PHPzavant
2023-05-07 17:43:071635parcourir

    1. Introduction

    L'affichage des données, c'est-à-dire la visualisation des données, est la cinquième étape de l'analyse des données. La plupart des gens sont plus sensibles aux graphiques qu'aux chiffres. Une bonne façon d'afficher les données peut aider les gens à découvrir rapidement des problèmes ou. modèles, trouvez la valeur cachée derrière les données.

    2.Concept Matplotlib

    Matplotlib est une bibliothèque de dessins 2D couramment utilisée en Python. Elle peut facilement visualiser des données et créer de magnifiques graphiques. Le module Matplotlib est très volumineux et l'un des sous-modules les plus couramment utilisés est pyplot. Il est généralement importé de la manière suivante :

     import matplotlib.pyplot as plt

    Parce qu'il est souvent utilisé dans les programmes, matplotlib.pyplot reçoit l'alias plt. réduisez beaucoup de duplications. Code

    3.Utilisation de base de Matplotlib.pyplot

    La méthode de dessin la plus basique dans pyplot est de dessiner avec des points, c'est-à-dire que les coordonnées de chaque point sont données par pyplot pour dessiner ces points dans le. système de coordonnées et utilisez des lignes pour les dessiner. En prenant la fonction sinus comme exemple, utilisez pyplot pour dessiner l'image :

    Segment de code 1 :

     import numpy as np
     import matplotlib.pyplot as plt
     
     x = np.arange(0,2*np.pi,0.1) #生成一个0到2pi、步长为0.1的数组x
     y = np.sin(x) #将x的值传入正弦函数,得到对应的值存入数组y
     plt.plot(x,y) #传入plt.plot(),将x,y转换成对应坐标。
     plt.show() #显示图像

    Le programme ci-dessus dessine l'image suivante :

    Apprenez à utiliser la visualisation de données Matplotlib

    Remarque : Choisissez la taille du pas de x doit être égal à 0,1 afin de réduire l'intervalle entre chaque point et de rapprocher l'image de la situation réelle, sinon si la taille du pas est trop grande, elle deviendra une polyligne. Si la taille du pas est de 1, elle deviendra la polyligne. situation suivante :

    Apprenez à utiliser la visualisation de données Matplotlib

    Sauf pour np.sin En plus de la méthode (), numpy a également np.cos(), np.tan() et d'autres méthodes pour calculer les fonctions trigonométriques. Parmi les méthodes ci-dessus, la plus importante est la méthode plt.plot(). La méthode plt.plot() peut recevoir n'importe quel logarithme de x et y. Elle dessinera ces images sur une seule image, comme le sinus original. image cosinus à l'image, vous pouvez l'écrire comme ceci :

     import numpy as np
     import matplotlib.pyplot as plt
     
     x = np.arange(0,2*np.pi,0.1) #生成一个0到2pi,步长为0.1的数组x
     y1 = np.sin(x) #将x的值传入正弦函数,得到对应的值存入数组y1
     y2 = np.cos(x) #将x的值传入余弦函数,得到对应的值存入数组y1
     plt.plot(x,y1,x,y2) #传入plt.plot(),将(x,y1)、(x,y2)转换成对应坐标。
     plt.show() #显示图像

    Le programme ci-dessus utilise le même x Bien sûr, vous pouvez également redéfinir un nouveau x. L'image finale est la suivante :

    Apprenez à utiliser la visualisation de données Matplotlib

    Code. le segment 2 est utilisé une fois plt La méthode .plot() convertit directement deux nombres en coordonnées correspondantes. Bien sûr, elle peut également être appelée deux fois. Les deux lignes de code suivantes sont équivalentes à la 7ème ligne de code ci-dessus.

     plt.plot(x,y1)
     plt.plot(x,y2)

    Pour chaque paire de x et y, il existe un paramètre de formatage facultatif qui spécifie la couleur de la ligne, l'étiquette du point et le type de ligne.

    Segment de code 3 :

     import numpy as np
     import matplotlib.pyplot as plt
     
     x = np.arange(0,2*np.pi,0.1) #生成一个0到2pi,步长为0.1的数组x
     y1 = np.sin(x) #将x的值传入正弦函数,得到对应的值存入数组y1
     y2 = np.cos(x) #将x的值传入余弦函数,得到对应的值存入数组y1
     plt.plot(x,y1,'ro--',x,y2,'b*-.') #将(x,y1)、(x,y2)转换成对应坐标,并选用格式化参数
     plt.show() #显示图像

    Après avoir passé les paramètres de formatage dans le segment de code 2, l'image finale ressemble à ceci :

    Apprenez à utiliser la visualisation de données Matplotlib

    En prenant le paramètre 'ro--' comme exemple, elle est divisée into Il comporte trois parties : r représente le rouge, o représente le point au point de coordonnées et -- représente la ligne pointillée.

    En général, les lignes sont des lignes pointillées et les points de coordonnées sont marqués sous forme de points. Ces trois parties des paramètres de format sont toutes facultatives, c'est-à-dire qu'il est également possible de les transmettre en partie, et il n'y a aucune exigence d'ordre. Les sélections et significations couramment utilisées des paramètres de format sont indiquées dans le tableau suivant : 'ro--'

    .

    3. Affichage des données

    Apprenez à utiliser la visualisation de données Matplotlib3.1 Comment choisir la méthode d'affichage

    Nous prenons des décisions grâce à l'analyse des données, il est donc crucial d'utiliser des graphiques appropriés pour afficher avec précision les données. En utilisation réelle, nous utiliserons des dizaines de graphiques différents. Ils peuvent être divisés en cinq types selon le but d'affichage des données, à savoir : tendance, comparaison, composition, distribution et connexion.

    Apprenez à utiliser la visualisation de données Matplotlib

    Tendance :
      La relation de série chronologique la plus courante, qui concerne la façon dont les données évoluent au fil du temps. Les icônes de la tendance peuvent refléter intuitivement les tendances de changement annuelles, mensuelles et quotidiennes, la croissance, la diminution, la hausse. et vers le bas Les fluctuations sont toujours fondamentalement inchangées. Le plus courant est le graphique linéaire, qui peut bien montrer la tendance de l'indicateur au fil du temps.
    • Composition :
    • Concentrez-vous principalement sur la proportion de chaque partie dans son ensemble, si l'objectif de l'analyse inverse est tel que "part", "pourcentage", etc. Type de graphique qui montre les relations, le plus souvent un diagramme circulaire.
    • Comparaison :
    • Vous pouvez afficher l'ordre d'une certaine dimension et analyser si la comparaison entre certaines dimensions est similaire, ou "supérieure à" ou "inférieure à", comme par exemple en analysant la différence de taille entre les garçons et les filles.
    • Distribution :
    • Lorsque vous vous souciez de la fréquence et de la distribution dans l'ensemble de données, par exemple, en fonction des données de localisation géographique, utilisez des cartes pour afficher différentes caractéristiques de distribution. Les graphiques les plus couramment utilisés comprennent les cartes, les histogrammes et les nuages ​​de points.
    • 联系:主要查看两个变量之间是否表达出我们所要证明的相关关系,比如预期销售额可能随着优惠折扣的增长而增长,常用于表打“与......有关”、“随......而增长”、“随......而不同”等维度的关系。

    在进行数据可视化时,要先明确分析的目标,再来选择五种合适的分类,最后选择某个分类里合适的图表类型。

    3.2绘制折线图

    其实在前面已经用过折线图了,就是使用 plot.plot() 方法。之前我们传入的时x和y坐标点,而折线图的 x 和 y 分别是时间点和对应的数据,下面以两个商品的销量走势为例:

    import numpy as np
    import matplotlib.pyplot as plt
     
    x = ['周一','周二','周三','周四','周五','周六','周日']
    y1 = [61,42,52,72,86,91,73]
    y2 = [23,26,67,38,46,55,33]
    #传入label参数
    plt.rcParams['font.family'] = ['SimHei'] #设置字体防止乱码
    plt.plot(x, y1, label='商品A') #增加折线图例“商品A”
    plt.plot(x, y2, label='商品B') #增加折线图例“商品B”
    #设置x轴标签
    plt.xlabel('时间')
    plt.ylabel('销量')
    #设置图表标题
    plt.title('商品销量对比图')
    #显示图例、图像
    plt.legend(loc='best') #显示图例,并设置在“最佳位置”
    plt.show()

    得到的图像如下图所示:

    Apprenez à utiliser la visualisation de données Matplotlib

    因为上图中有中文,所以通过 plt.rcParams['font.family'] = ['SimHei'] 来设置中文字体来防止乱码,如果想设置其他字体只需将 SimHei(黑体)替换成相应的名称即可。通过一下代码获得,自己编译器所在环境安装的字体:

    import matplotlib.font_manager as fm
    for font in fm.fontManager.ttflist:
        print(font.name)

     图例位置是一个可选参数,默认 matplotlib 会自动选择合适位置,也可以指定其他位置。

    具体的如下表所示:

    plt.legend() 方法的 loc 参数选择 参数含义参数含义best最佳位置center居中upper right右上角center right靠右居中upper left左上角center left靠左居中lower left左下角lower center靠下居中lower right右下角upper center靠上居中

    3.3绘制柱状图

    柱状图描述的是分类数据,展示的是每一类的数量。柱状图分为很多种,有普通柱状图、堆叠柱状图、分组柱状图等。

    3.3.1普通柱状图

     普通柱状图调用 plt.bar() 方式实现。我们至少需要传入两个参数,第一个参数是 x 轴上刻度的标签序列(列表、元组、数组等),第二个参数用于指定每个柱子的高度,也就是具体的数据。下面以一个班级体育课选课的情况为例:

    import matplotlib.font_manager as fm
    for font in fm.fontManager.ttflist:
        print(font.name)

     得到如下图像:

    Apprenez à utiliser la visualisation de données Matplotlib

     plt.bar() 前两个参数是必选的,当然还有一些可选参数,常用的有 width 和 color ,分别是用于设置柱子的宽度(默认0.8)和颜色。比如我们将柱子宽度改成0.6,将柱子的颜色设成好看的天蓝色只需将 plt.bar() 改为 plt.bar(names, nums, width=0.6, color='skyblue') 即可。之前在折线图部分用到的 plt.xlabel() 、plt.ylabel() 、plt.title() 和 plt.legend() 方法都是通用方法,并不局限于一种图表,所有的图表都适用。

    3.3.2堆叠柱状图

     柱状图能直观地展现出不同数据上的差异,但有时候我们需要进一步分析数据的分布,比如每门选修课的男女比例,这时就需要用到堆叠柱状图。

    下面就是进一步分析每一门选修课中男女比例为例编写程序:

    import numpy as np
    import matplotlib.pyplot as plt
     
    plt.rcParams['font.family'] = ['SimHei'] #设置字体防止乱码
    name = ['乒乓球','羽毛球','网球']
    nums_boy = [16,5,11]
    nums_girl = [10,15,8]
     
    plt.bar(name, nums_boy, width=0.6, color='skyblue', label='男')
    plt.bar(name, nums_girl, bottom=nums_boy, width=0.6, color='pink', label='女')
    plt.legend()
    plt.show()

    最终得到图像:

    Apprenez à utiliser la visualisation de données Matplotlib

    上面的代码和普通柱状图相比,多调用了一次,plt.bar() 方法,并传入了 bottom 参数,每调用一次 plt.bar() 方法都会画出对应的柱状图,而 bottom 参数作用就是控制柱状图低端的位置。我们将前一个柱状图的高度传进去,这样就形成了堆叠柱状图。而如果没有 bottom 参数,后面的图形会盖在原来的图形之上,

    就像下面这样:

    Apprenez à utiliser la visualisation de données Matplotlib

    3.3.3分组柱状图

    分组柱状图经常用于不同组间数据的比较,这些组都包含了相同分类的数据。

    先来看一下效果图:

    Apprenez à utiliser la visualisation de données Matplotlib

     绘制上图的代码如下:

    import numpy as np
    import matplotlib.pyplot as plt
     
    x = np.arange(3)
    width = 0.3
     
    names = ['篮球', '羽毛球', '乒乓球']
    nums_boy = [16, 5, 11]
    nums_girl = [10, 15, 8]
    plt.rcParams['font.family'] = ['SimHei'] #设置字体防止乱码
    plt.bar(x - width / 2, nums_boy, width=width, color='skyblue', label='男')
    plt.bar(x + width / 2, nums_girl, width=width, color='pink', label='女')
    plt.xticks(x, names)
    plt.legend()
    plt.show()

    这次的方法和之前有些不同,首先使用 np.arange(3) 方法创建了一个数组 x ,值为[0,1,2]。并定义了一个变量 width 用于指定柱子的宽度。在调用 plt.bar() 时,第一个参数不再是刻度线上的标签,而是对应的刻度。以[0,1,2]为基准,分别加上或减去柱子的宽度得到[-0.15,0.85,1,85]和[0.15,1.15,2.15],这些刻度将分别作为两组柱子的中点,并且柱子的宽度为0.3。

    Apprenez à utiliser la visualisation de données Matplotlib

    因为传入的是刻度,而不是刻度的标签。所以调用 plt.xticks() 方法来将 x 轴上刻度改为对应的标签,该方法第一个参数时要改的刻度序列,第二个参数时与之对于的标签序列。同理,使用plt.yticks() 方法来更改y轴上刻度的标签。

    3.3.4饼图

    饼图广泛地应用在各个领域,用于表示不同分类的占比情况,通过弧度大小来对比各种分类。饼图通过将一个圆饼按照分类的占比划分成多个区块,整个圆饼代表数据的总量,每个区块(圆弧)表示该分类占总体的比例大小,所有区块(圆弧)的加和等于100%。

     饼图的绘制很简单,只需要传入数据和对于的标签给 plt.pie() 方法即可。以2018年国内生产总值(GDP)三大产业的占比为例,可以画出这样的饼图:

    Apprenez à utiliser la visualisation de données Matplotlib

    绘制上图的代码如下:

    import matplotlib.pyplot as plt
     
    plt.rcParams['font.family'] = ['SimHei'] #设置字体防止乱码
    data = [64745.2, 364835.2, 489700.8]
    labels = ['第一产业', '第二产业', '第三产业']
    explode = (0.1, 0, 0)
    plt.pie(data, explode=explode, labels=labels,autopct='%0.1f%%')
    plt.show()

     plt.pie() 方法的第一个参数是绘图需要的数据;参数 explode 是可选参数,用于突出显示某一区块,默认数值都是0,数值越大,区块抽离越明显;参数 lables 是数据对应的标签;参数 autopct 则给饼图自动添加百分比显示。

    参数 autopct 的格式用到了字符串格式化输出的知识,代码中 '%0.1f%%' 可以分成两部分。一部分是 %0.1f 表示保留一位小数,同理 %0.2f 表示保留两位小数;另一部分是 %% ,它表示输出一个 %,因为% 在字符串格式化输出中有特殊的含义,所以想要输出 % 就得写成 %% 。所以,'%0.1f%%' 的含义是保留一位小数的百分数,例如:66.6%。

    4.绘制子图

    Matplotlib 提供了子图的概念,通过使用子图,可以在一张图里绘制多个图表。在 matplotlib 中,调用 plt.subplot() 方法来添加子图。plt.subplot() 方法的前两个参数分别是子图的行数和列数,第三个参数是子图的序号(从1开始)。

    ax1 = plt.subplot(2, 2, 1)
    ax2 = plt.subplot(2, 2, 2)
    ax3 = plt.subplot(2, 2, 3)
    ax4 = plt.subplot(2, 2, 4)

     plt.subplot(2,2,1) 的作用是生成一个两行两列的子图,并选择其中序号为1的子图,所以上面四行代码将一张图分成了4个子图,并用1、2、3、4来选择对应的子图。

    Apprenez à utiliser la visualisation de données Matplotlib

    我们也可以绘制不规则的子图,比如上面两张子图,下面一张子图。

    方法如下:

    ax1 = plt.subplot(2, 2, 1)
    ax2 = plt.subplot(2, 2, 2)
    ax3 = plt.subplot(2, 1, 2)

    之所以第三行代码是 plt.subplot(2, 1, 2) ,因为子图序号是独立的,与之前创建的子图没有关系。plt.subplot(2, 2, 1) 选择并展示了2*2的子图中的第一个。plt.subplot(2, 2, 2) 选择并展示了2*2的子图中的第二个,它们两个合起来占了2*2子图的第一行。而 plt.subplot(2, 1, 2) 则是生成了两行一列的子图,并选择了第二行。即占满第二行的子图,正好填补了之前2*2子图第二行剩下的空间,因此生成的图表是这样的:

    Apprenez à utiliser la visualisation de données Matplotlib

    图表的框架画好了,就可以往里面填充图像了,之前调用的是 plt 上的方法绘图,只要将其改成 plt.subplot() 方法的返回值上调用相应的方法绘图即可。

    举个栗子,下面是在一张图上绘制了 sin、cos 和 tan 三个函数的图像的代码:

    import numpy as np
    import matplotlib.pyplot as plt
     
    plt.rcParams['font.family'] = ['SimHei'] #设置字体防止乱码
     
    x = np.arange(0, 2 * np.pi, 0.1)
     
    plt.suptitle('三角函数可视化')
    ax1 = plt.subplot(2,2,1)
    ax1.set_title('sin函数')
    y1 = np.sin(x)
    ax1.plot(x,y1)
     
    ax2 = plt.subplot(2,2,2)
    ax2.set_title('cos函数')
    y2 = np.cos(x)
    ax2.plot(x,y2)
     
    ax3 = plt.subplot(2,1,2)
    ax3.set_title('tan函数')
    y3 = np.tan(x)
    ax3.plot(x,y3)
     
    plt.show()

    得到的图像是:

    Apprenez à utiliser la visualisation de données Matplotlib

    上面程序中,使用 set_title() 方法为每个子图设置单独的标题。需要注意的是,如果想要给带有子图的图表设置总的标题的话,不是使用的 plt.titie() 方法,而是通过 plt.suptitile() 方法来设置带有子图的图表标题。 

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer