【Python】【数据分析】深入探索 Python 数据可视化:Matplotlib 绘图库完整教程

目录

  • 引言
  • 一、什么是 Matplotlib?
  • 1.1 Matplotlib 的安装
  • 1.2 Matplotlib 的基本功能
  • 二、Matplotlib 的基础绘图
  • 2.1 绘制折线图
  • 2.2 绘制柱状图
  • 2.3 绘制散点图
  • 2.4 绘制饼图
  • 三、高级功能与定制
  • 3.1 设置图表样式
  • 3.2 使用子图
  • 3.3 保存图表
  • 四、Matplotlib 流程图
  • 4.1 Mermaid 流程图
  • 4.2 中文显示与负号问题
  • 总结
  • 参考文献
  • 引言

    在数据分析与机器学习的过程中,数据可视化是一个至关重要的环节。它不仅能够帮助我们清晰地理解数据的分布和趋势,还能在结果呈现时增强表达力和说服力。在众多 Python 数据可视化工具中,Matplotlib 作为最流行且功能强大的绘图库之一,被广泛应用于静态、动态及交互式图表的绘制。

    本篇文章将从 Matplotlib 的基础知识开始,逐步深入探讨如何用其绘制各种图表,包括折线图、柱状图、散点图、饼图等常见图形,并介绍如何定制图表、添加样式以及多子图的使用方法。最后,我们还将通过 Mermaid 流程图来展示 Matplotlib 的使用流程,帮助大家更好地理解整个操作流程。

    一、什么是 Matplotlib?

    Matplotlib 是一个 2D 绘图库,它提供了一种非常简单而强大的方式来创建静态图、动态图以及交互式图。其广泛应用于数据分析、机器学习、科研研究等领域,尤其是在数据科学的可视化环节,它几乎是每个数据科学家都必备的工具。

    1.1 Matplotlib 的安装

    安装 Matplotlib 非常简单,可以通过 Python 的包管理工具 pip 来完成。打开命令行,执行以下命令即可:

    pip install matplotlib
    

    如果你已经安装了 Matplotlib,可以使用以下命令来更新到最新版本:

    pip install --upgrade matplotlib
    

    安装完成后,我们可以通过以下方式在代码中导入 Matplotlib:

    import matplotlib.pyplot as plt
    

    plt 是 Matplotlib 库中 pyplot 模块的常用别名,几乎所有的绘图命令都可以通过 plt 来调用。

    1.2 Matplotlib 的基本功能

    Matplotlib 提供了多种绘图功能,最常用的就是 pyplot 模块,它封装了多种常见的绘图命令,能帮助我们快速绘制各种图表。

    二、Matplotlib 的基础绘图

    Matplotlib 提供了多种绘图方式,其中最常见的是使用 pyplot 模块来绘制图形。接下来,我们将通过一些常见的图表类型来介绍 Matplotlib 的基本使用方法。

    2.1 绘制折线图

    折线图是数据可视化中最常见的图表类型之一,特别适用于展示随时间变化的数据,通常用于展示数据随时间的变化趋势或其他变量的关系。

    import matplotlib.pyplot as plt
    from matplotlib import rcParams
    
    # 设置中文字体
    rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
    rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
    
    # 数据
    x = [1, 2, 3, 4, 5]
    y = [1, 4, 9, 16, 25]
    
    # 绘制折线图
    plt.plot(x, y, label='y = x^2', color='blue', marker='o')
    
    # 添加标题和标签
    plt.title('折线图示例')
    plt.xlabel('X轴')
    plt.ylabel('Y轴')
    
    # 显示图例
    plt.legend()
    
    # 显示图形
    plt.show()
    

    代码详解:

    1. 数据定义xy 是表示坐标的列表,x 表示横坐标,y 表示纵坐标。
    2. 绘图命令plt.plot(x, y) 用于绘制折线图。可以通过 color 设置线条颜色,通过 marker 设置数据点的样式。
    3. 添加图表元素plt.title() 用于添加图表的标题,plt.xlabel()plt.ylabel() 用于添加 x 轴和 y 轴标签,plt.legend() 用于显示图例。

    输出效果:
    生成一个显示数据点 (x, y) 的折线图,其中 y 值是 x 的平方。

    2.2 绘制柱状图

    柱状图用于展示各个类别数据的比较,适合对比不同类别的数据。它常用于分类数据的可视化,能够清晰地显示不同类别的大小。

    import matplotlib.pyplot as plt
    from matplotlib import rcParams
    
    # 设置中文字体
    rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
    rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
    
    # 数据
    labels = ['A', 'B', 'C', 'D']
    values = [10, 20, 15, 30]
    
    # 绘制柱状图
    plt.bar(labels, values, color='skyblue')
    
    # 添加标题和标签
    plt.title('柱状图示例')
    plt.xlabel('类别')
    plt.ylabel('值')
    
    # 显示图形
    plt.show()
    

    代码详解:

    1. 数据定义labels 表示类别名称,values 是每个类别的值。
    2. 绘图命令plt.bar() 用于绘制柱状图,color 设置柱子的颜色。
    3. 添加图表元素:与折线图类似,通过 plt.title()plt.xlabel()plt.ylabel() 来添加标题和轴标签。

    输出效果:
    生成一个简单的柱状图,显示四个类别的值,柱子的高度代表它们的大小。

    2.3 绘制散点图

    散点图用于展示两个变量之间的关系,尤其适合于观察数据的分布和趋势。

    import matplotlib.pyplot as plt
    from matplotlib import rcParams
    
    # 设置中文字体
    rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
    rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
    
    # 数据
    x = [1, 2, 3, 4, 5]
    y = [10, 20, 25, 30, 40]
    
    # 绘制散点图
    plt.scatter(x, y, color='red')
    
    # 添加标题和标签
    plt.title('散点图示例')
    plt.xlabel('X轴')
    plt.ylabel('Y轴')
    
    # 显示图形
    plt.show()
    

    代码详解:

    1. 数据定义xy 分别表示横轴和纵轴的数据。
    2. 绘图命令plt.scatter() 用于绘制散点图,color 设置点的颜色。

    输出效果:
    展示了一组 (x, y) 数据点,便于我们观察数据的分布趋势。

    2.4 绘制饼图

    饼图通常用于展示各个部分占总体的比例,适合用于可视化百分比数据,常用于市场份额、投票结果等方面的展示。

    import matplotlib.pyplot as plt
    from matplotlib import rcParams
    
    # 设置中文字体
    rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
    rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
    
    # 数据
    labels = ['Python', 'Java', 'C++', 'JavaScript']
    sizes = [40, 30, 20, 10]
    
    # 绘制饼图
    plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
    
    # 添加标题
    plt.title('语言使用比例')
    
    # 显示图形
    plt.show()
    

    代码详解:

    1. 数据定义labels 是类别标签,sizes 是各个类别的比例。
    2. 绘图命令plt.pie() 用于绘制饼图,autopct 控制显示百分比,startangle 控制起始角度。

    输出效果:
    展示了不同编程语言使用比例的饼图。

    三、高级功能与定制

    3.1 设置图表样式

    Matplotlib 提供了多种内置样式,可以通过 plt.style.use() 来改变图表的外观。

    import matplotlib.pyplot as plt
    from matplotlib import rcParams
    import random
    
    # 设置中文字体
    rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
    rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
    
    # 打印可用的样式
    print("Available styles:", plt.style.available)
    
    # 随机选择一个样式
    random_style = random.choice(plt.style.available)
    
    # 使用随机选择的样式
    plt.style.use(random_style)
    
    # 绘制数据
    x = [1, 2, 3, 4, 5]
    y = [1, 4, 9, 16, 25]
    
    plt.plot(x, y)
    plt.title('折线图示例')
    plt.show()
    

    代码详解:

    1. 设置样式:通过 plt.style.use() 可以切换到多种内置样式,如 seaborn-darkgridggplot 等,这样可以快速获得美观的图表外观。例如,使用 seaborn-darkgrid 可以为图表添加背景网格和柔和的配色,使图形更加清晰易读。

    2. 查看可用样式:使用 plt.style.available 可以列出当前环境下所有可用的样式名称。这样你可以选择最适合的样式,以满足不同的展示需求。

    3. 随机选择样式:可以通过 random.choice(plt.style.available) 随机从所有可用样式中选择一个,这对于在不同情境下快速测试不同风格的图表非常有用。

    4. 应用样式:选择并应用样式后,所有后续绘图操作都会继承该样式的设置,比如颜色、线条、网格等,极大提高了绘图效率。

    输出效果:
    这将使图表采用随机内置的风格,提高可视化效果。

    3.2 使用子图

    当需要在一个窗口中展示多个图表时,plt.subplots() 是非常有用的函数。它可以创建多个子图并将其组织成一个网格。

    import matplotlib.pyplot as plt
    from matplotlib import rcParams
    
    # 设置中文字体
    rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
    rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
    
    # 创建 1 行 2 列的子图
    fig, axs = plt.subplots(1, 2)
    
    # 第一个子图:折线图
    axs[0].plot([1, 2, 3], [1, 4, 9])
    axs[0].set_title('折线图')
    
    # 第二个子图:柱状图
    axs[1].bar(['A', 'B', 'C'], [10, 20, 15])
    axs[1].set_title('柱状图')
    
    # 设置主图标题
    fig.suptitle('子图示例', fontsize=16)
    
    # 自动调整子图布局,使得标题和内容不重叠
    fig.tight_layout(rect=[0, 0, 1, 0.96])  # 通过调整 rect 参数给主标题留出空间
    
    # 显示图形
    plt.show()
    

    代码详解:

    1. 创建子图plt.subplots(1, 2) 创建了一个 1 行 2 列的子图,每个子图可以单独绘制。fig 是主图对象(figure),axs 是一个包含两个子图(axes)的数组。
    2. 访问子图:通过 axs[0]axs[1] 分别访问两个子图。
    3. 设置标题axs[0].set_title('折线图')axs[1].set_title('柱状图') 为每个子图设置标题,分别为“折线图”和“柱状图”。
    4. 设置主图标题fig.suptitle('子图示例', fontsize=16) 设置整个图表的主标题“子图示例”,并指定字体大小为 16。
    5. 调整子图布局fig.tight_layout(rect=[0, 0, 1, 0.96]) 使用 tight_layout() 自动调整子图的位置和大小,以防止子图标题与内容重叠。rect=[0, 0, 1, 0.96] 指定了一个边距区域,确保主标题不会与子图的内容重叠。

    输出效果:
    生成一个表示不同编程语言使用比例的饼图,每个部分的比例以百分比形式标注,直观显示各语言的使用份额。

    3.3 保存图表

    绘制完成后,可以通过 plt.savefig() 将图表保存为文件,以便后续使用或分享。

    import matplotlib.pyplot as plt
    from matplotlib import rcParams
    
    # 设置中文字体
    rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 中文字体
    rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
    
    # 数据
    x = [1, 2, 3, 4, 5]
    y = [1, 4, 9, 16, 25]
    
    # 绘制折线图
    plt.plot(x, y, label='y = x^2')
    
    # 添加标题和标签
    plt.title('折线图示例')
    plt.xlabel('X轴')
    plt.ylabel('Y轴')
    
    # 保存图表为PNG文件
    plt.savefig('line_chart.png', bbox_inches='tight')
    
    # 显示图形
    plt.show()
    

    代码详解:

    1. 保存图表plt.savefig('line_chart.png') 用于将当前图表保存为图像文件。可以选择保存为 .png.jpg.svg 等格式。savefig 函数支持各种额外的参数,如设置 DPI(分辨率)、透明背景等。使用 bbox_inches='tight' 去除边缘空白。

    2. 显示图形plt.show() 继续展示图形,确保图表在屏幕上显示。

    输出效果:
    保存后的图表文件可以在项目中直接引用或在报告中使用。

    四、Matplotlib 流程图

    为了帮助大家更好地理解如何在代码中一步一步地绘制 Matplotlib 图表,本文使用流程图来可视化整个绘制过程,流程图能够直观地展示复杂的步骤和流程。

    4.1 Mermaid 流程图

    折线图

    柱状图

    散点图

    CSDN @ 2136

    开始

    准备数据

    选择图表类型

    plt.plot

    plt.bar

    plt.scatter

    自定义图表属性

    显示图表

    保存图表

    结束

    CSDN @ 2136

    在上面的流程图中,我们展示了绘制一个 Matplotlib 图表的完整过程。这个流程图展示了使用 Matplotlib 绘制图表的基本步骤,包括选择图表类型、添加标签、显示和保存图表。通过这个流程图,用户可以更加清晰地理解如何使用 Matplotlib 来完成数据可视化。

    图表的绘制流程分为以下几个步骤:

    1. 开始:启动绘制过程。
    2. 准备数据:准备绘制所需的数据,可能是从文件、数据库、或手动输入的数据。
    3. 选择图表类型:根据需求选择适当的图表类型,如折线图、柱状图、散点图等。
    4. 使用 Matplotlib 绘图:根据选择的图表类型,调用相应的 Matplotlib 函数(如 plt.plot()plt.bar()plt.scatter(),绘制数据的图形。
    5. 自定义图表属性:对图表进行样式、标签、标题、坐标轴等的定制。
    6. 显示图表:在屏幕上显示图表,通常用 plt.show()
    7. 保存图表:通过 plt.savefig() 保存图表为文件。
    8. 结束:绘图流程完成。

    4.2 中文显示与负号问题

    在进行数据可视化时,常常会遇到中文显示不正常或者负号显示为乱码的问题。为了确保 Matplotlib 绘制的图表能够正确显示中文并解决负号显示问题,我们可以通过 rcParams 配置 Matplotlib 的字体设置。

    代码示例:

    from matplotlib import rcParams
    
    # 设置中文字体
    rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 你可以根据系统中安装的字体修改为合适的中文字体
    rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
    

    解释:

    1. 设置中文字体rcParams['font.sans-serif'] = ['Microsoft YaHei'] 这一行代码指定了 Matplotlib 使用 Microsoft YaHei 字体来显示中文字符。你可以根据自己的操作系统,替换为其他的中文字体,如 SimHeiSTKaiti 等。这样可以确保在图表中显示中文时不会出现乱码。

    2. 解决负号显示问题rcParams['axes.unicode_minus'] = False 这一行代码解决了负号显示为乱码的问题。Matplotlib 默认情况下,负号可能会显示为其他字符,特别是在使用中文字体时,通过这行代码可以确保负号正确显示。

    将上述设置添加到代码中后,你就可以在 Matplotlib 中顺利使用中文并避免负号显示错误。

    总结

    Matplotlib 是 Python 中最重要的可视化库之一,广泛应用于数据分析和机器学习领域。本文通过一系列简单的例子展示了 Matplotlib 的基本用法,涵盖了常见的折线图、柱状图、散点图、饼图等图表的绘制。通过调整图表的样式、添加图例、标题和标签等,可以极大提高图表的可读性和美观性。

    进一步地,我们还展示了如何利用 Mermaid 流程图来直观地呈现绘图过程,帮助用户快速理解整个流程,并加深对 Matplotlib 的掌握。

    如果你是数据分析初学者,掌握 Matplotlib 是你进入数据可视化世界的重要一步。通过不断地练习和深入探索,你将能够创建出更加精美和富有表现力的图表。

    参考文献

  • Matplotlib 官方文档

  • Mermaid 官方文档

  • Matplotlib 学习教程 – CSDN

  • 通过上述内容,你已经了解了如何使用 Matplotlib 进行数据可视化的基本操作,并且掌握了如何优化图表及可视化过程。希望这篇文章能帮助你更好地掌握数据可视化的技巧,提升数据分析的能力!


    作者:丶2136

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】【数据分析】深入探索 Python 数据可视化:Matplotlib 绘图库完整教程

    发表回复