使用 Matplotlib 进行数据可视化

科技   2024-09-03 08:30   重庆  
点击下方卡片,关注“机器视觉与AI深度学习

视觉/图像重干货,第一时间送达!

    Matplotlib 是一个流行的 Python 数据可视化库。它可用于创建任何类型的图表:折线图、饼图、逐行直方图等,具体取决于任务。
    在本文中,我们将学习如何导入库并通过示例分析数据可视化的主要方法。
什么是 Matplotlib 以及为什么需要它?
    Matplotlib 库是 Python 中的数据可视化库,允许您在多个层面处理数据:
    • 使用 Pyplot 模块,将图表视为一个整体;
    • 通过面向对象的界面,当每个形状或其一部分都是单独的对象时,这允许您有选择地更改它们的属性和显示。
    在本文中,我们将使用 Pyplot 模块,该模块足以进行绘图。
    Matplotlib 用于可视化任何复杂程度的数据。该库允许您构建不同类型的图形:线性、三维、散点图等,以及将它们组合在一起。
    附加库可让您扩展数据分析的可能性。例如,Cartopy 模块增加了处理制图信息的能力。您可以从官方文档中了解有关 Matplotlib 的更多信息。
    Matplotlib 本身是其他库的基础——例如,Seaborn 使创建图表变得更容易,并且有更多选项可以改善其外观。但 Matplotlib 是一个基本的数据可视化库,在数据分析中不可或缺。
Matplotlib、Pyplot 和 Pylab 有何关系?
    在深入研究 Matplotlib 时,会提到两个模块:Pyplot 和 Pylab。了解在工作中使用哪一个以及它们出现的原因很重要。让我们了解一下术语。
    Matplotlib 库是 Python 中用于数据可视化的包。Pyplot 是 Matplotlib 包中的一个模块。您经常会在代码中看到它,即 matplotlib.pyplot。该模块有助于自动创建轴、图形和其他组件,而无需考虑如何实现。大多数情况下使用的是 Pyplot。
    Pylab 是与 Matplotlib 包一起安装的另一个模块。它同时导入 Pyplot 和 NumPy 库,以便在处理数据时以交互方式处理数组或访问绘图函数。
    现在,Pylab 只具有历史意义——它促进了从 MATLAB 到 Matplotlib 的过渡,因为它允许您不使用 import 语句(这是 MATLAB 用户以前的工作方式)。您可能会在各个网站的代码示例中遇到 Pylab,但实际上,您不需要使用该模块。
安装并导入库
    Matplotlib 是一个通用库,可在 Windows、macOS 和 Linux 上使用 Python 运行。使用 Google Colab 或 Jupyter Notebook 时,您无需安装 Python 和 Matplotlib——编程语言和库已经开箱即用。但如果您决定在另一个 IDE(例如 Visual Studio Code)中编写代码,则请先安装 Python,然后通过终端安装Learn库:
pip3 install matplotlib
    现在您可以继续导入库:
import matplotlib.pyplot as plt
    该库的缩写plt是普遍接受的。您会在官方文档、书籍和其他人的笔记本电脑中找到它。所以,使用它吧。
在 Matplotlib 中构建第一个图
    首先,让我们创建两个变量 —x和y,它们将包含 x 和 y 轴上点的坐标:
x = [1, 2, 3, 4, 5]y = [24, 29, 33, 19, 24]
    现在让我们建立一个连接这些点的图表:
plt.plot(x, y)plt.show()
    我们得到了一个常规的折线图。让我们分解一下每个命令:
    plt.plot()是一个标准函数,它根据传递给它的值绘制图形。我们将点的坐标传递给它;
    plt.show()是一个负责将渲染的数据在屏幕上显示出来的函数。
    让我们为第一个图表添加标题和轴标签:
plt.plot(x, y)plt.xlabel('x-axis') #name of the x-axisplt.ylabel('y-axis') #name of the y-axisplt.title('First graph') #name of the graphplt.show()
    使用 Matplotlib,您可以自定义任何图的显示。例如,我们可以更改线条的颜色,以及突出显示我们在变量中设置其坐标的点:
plt.plot(x, y, color='purple', marker='o', markersize=8)
    现在点清晰可见,并且点和线的颜色已变为紫色:
    关于设置plt.plot()函数参数的详细信息可以参阅官方文档。
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html
构建散点图
    散点图用于评估绘制在不同轴上的两个变量之间的关系。要构建它,plt.scatter()需要使用函数,其参数是具有离散值的变量:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]y = [19, 24, 33, 22, 27, 21, 20, 30, 17, 26]
plt.scatter(x, y, color='purple')plt.show()
    散点图看起来像很多单独的点:
构建条形图
    这种类型的可视化允许您方便地比较各个变量的值。在柱形图中,柱的长度与其代表的度量成比例。通常,其中一个轴对应一个类别,第二个轴对应其离散值。
    例如,条形图可以直观地显示每月的利润金额。让我们构建以下图表:
x = ['January', 'February', 'March', 'April', 'May']y = [2, 4, 3, 1, 7]
plt.bar(x, y, color='purple', label='Profit amount') #label parameter allows you to set the name of the value for the legendplt.xlabel('Month')plt.ylabel('$ Profit (in million)')plt.title('Barchart Example')plt.legend()plt.show()
    条形图可以让你看到按月利润变化的动态:

组合不同的图表选项
    对于某些任务,组合几种类型的图表(例如条形图和折线图)很有用。让我们通过在列中添加带有利润值的点并将它们连接起来来对其进行改进:
x = ['January', 'February', 'March', 'April', 'May']y = [2, 4, 3, 1, 7]
plt.bar(x, y, color='purple', label='Profit amount') #label parameter allows you to set the name of the value for the legendplt.plot(x, y, color='blue', marker='o', markersize=8)
plt.xlabel('Month')plt.ylabel('$ Profit (in million)')plt.title('Combining Graphs')plt.legend()plt.show()
    现在在一个屏幕上,我们可以同时看到两种类型:

    一切都顺利。但现在折线图很难看清——它只是在柱状图的紫色背景中消失了。让我们使用参数增加条形图的透明度alpha:

plt.bar(x, y, label='Profit amount', alpha=0.5)
    现在折线图清晰可见,我们可以评估利润变化的动态。
制作饼图
    饼图用于显示群组的构成。例如,我们可以直观地显示哪些品牌的汽车在城市的道路上占主导地位。让我们也玩一下颜色吧!
values = [23, 16, 55, 19, 37]labels = ["Honda", "Mazda", "BMW", "Mercedes", "Acura"]colors = ( "#9E70F1", "#F52B94", "#FFE174", "#65E9EB", '#F3907F') #identify colors
plt.pie(values, labels=labels, colors=colors)plt.title("Distribution of Car Brands on the Road")plt.show()
    看起来不错,但不清楚每个汽车品牌的份额是多少。因此,最好用百分比值补充饼图。让我们通过autopct向饼图函数添加参数来编辑代码:
values = [23, 16, 55, 19, 37]labels = ["Honda", "Mazda", "BMW", "Mercedes", "Acura"]colors = ( "#9E70F1", "#F52B94", "#FFE174", "#65E9EB", '#F3907F') #identify colors
plt.pie(values, labels=labels, colors=colors, autopct='%1.1f%%')plt.title("Distribution of Car Brands on the Road")plt.show()
    在参数中,我们传递数字的显示格式。在我们的例子中,这将是一个带有一位小数的整数。让我们运行代码并查看结果:
    现在,由于我们看到了数值,因此比较类别变得更容易了。
复杂的可视化
    让我们构建一个堆积条形图。它将使我们能够评估一个变量的值比率的动态。让我们尝试展示不同年份(美国)iOS 和 Android 上的设备数量如何相互关联:
labels = ['2019', '2020', '2021', '2022', '2023']users_ios = [52, 52.5, 53.2, 53, 57]users_android = [48, 47.5, 46.8, 47, 43]
width = 0.35 #set column widthfig, ax = plt.subplots()
ax.bar(labels, users_ios, width, color='#F52B94', label='iOS')ax.bar(labels, users_android, width, bottom=users_ios, color='#15C0C3', label='Android') #indicate with the bottom parameter that the values in the column should be higher than the values of the ios_users variable
ax.set_ylabel('Ratio %')ax.set_title('Distribution of iOS and Android Devices in US')ax.legend(loc='lower left', title='Devices') #shift the legend to the lower left corner so that it does not overlap part of the chart
plt.show()
    通过该图表我们可以看出,Android 和 iOS 设备的比例正在逐渐变化——iOS 设备的数量有所增加。
    Matplotlib 是一个强大的 Python 数据可视化库。在本文中,我们仅介绍了最基础的部分。更多有用信息可在官方文档中找到:
https://matplotlib.org/3.6.2/users/index.html

—THE END—

觉得有用,麻烦给个赞和在看 

机器视觉与AI深度学习
专注于机器视觉、AI、深度学习等技术最新资讯、实战内容及应用案例的分享,交流!
 最新文章