在数据分析、科学计算以及机器学习项目中,数据可视化(Data Visualization)是一项重要环节。通过图形化方式展示数据,可以帮助我们理解数据分布、发现规律以及验证分析结果。

例如,在一组数据中:

[10, 15, 20, 18, 25]

如果只以数字形式呈现,很难直观理解变化趋势;但若绘制为折线图,数据变化便可以一目了然。

Matplotlib 是 Python 中最基础、最常用的可视化库之一,具有以下特点:

• 支持多种图形类型(折线图、散点图、柱状图、直方图等)

• 与 NumPy、Pandas 等科学计算库高度兼容

• 支持高度自定义的图形样式

• 提供面向函数(pyplot)与面向对象(Figure/Axes)两种绘图方式

• 可以导出多种格式图像(PNG、PDF、SVG 等)

安装 Matplotlib:

pip install matplotlib

导入库:

import matplotlib.pyplot as plt

在 Matplotlib 中,大多数绘图函数都通过 matplotlib.pyplot 模块调用。

pyplot 提供了类似 MATLAB 的状态式绘图接口,本质上是对 Figure 与 Axes 对象操作的封装。

一、Matplotlib 的图形结构

理解 Matplotlib 的核心结构,有助于更清晰地理解各种绘图函数的作用。

Matplotlib 的图形系统由三个主要层次组成:

Figure → Axes → Artist

这三个层次可以理解为:

Figure 表示整个图形对象,是所有图形元素的顶层容器。

Axes 表示一个绘图坐标系区域,绝大多数绘图操作都发生在 Axes 上。

Artist 是图形中的具体元素,例如线条、文本、坐标轴和图例。

从视觉上可以理解为:

Figure(整个图形对象) ├── Axes(一个坐标系) │      ├── Line │      ├── Text │      └── Axis └── Axes(另一个子图)

在日常语言中,人们有时把 Figure 称为“画布”,而 Axes 则是画布上的绘图区。

在代码中通常通过 subplots() 同时创建 Figure 与 Axes:

fig, ax = plt.subplots()

此时:

• fig 表示整个图形对象

• ax 表示绘图坐标系

后续绘图操作通常发生在 ax 上:

ax.plot(x, y)

这种方式称为“面向对象绘图方式”,也是 Matplotlib 官方推荐的使用方式。

二、基础绘图函数

Matplotlib 的核心功能是绘制各种统计图形,例如折线图、散点图、柱状图和直方图等。

plot()

用于绘制折线图(Line Plot),是 Matplotlib 中最常用的函数。

plt.plot(    x,    y,    label=None,    color=None,    linestyle="-",    linewidth=None,    marker=None,    markersize=None,    alpha=None)

参数说明:

• x:横轴数据,通常为列表或 NumPy 数组。如果省略 x,则 Matplotlib 会自动生成从 0 开始的序列

• y:纵轴数据

• label:图例名称

• color:线条颜色

• linestyle:线条线型,例如 "-"、"--"、":"

• linewidth:线宽

• marker:数据点标记,例如 'o'、's'、'^'

• markersize:标记大小

• alpha:图形元素透明度

返回值:

返回一个 Line2D 对象列表。

示例:

import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(0, 10, 100)y = np.sin(x)
plt.plot(x, y, marker="o", label="sin(x)")
plt.legend()plt.show()

说明:

plot() 是 Matplotlib 中最基础的绘图函数,适用于:

• 时间序列分析

• 函数曲线绘制

• 数据趋势展示

以下示例默认已导入 Matplotlib 和 NumPy。

scatter()

用于绘制散点图(Scatter Plot)。

plt.scatter(    x,    y,    s=None,    c=None,    marker=None,    cmap=None,    alpha=None)

参数说明:

• x:横轴数据

• y:纵轴数据

• s:散点大小(size)

• c:散点颜色(color)

• marker:散点形状

• cmap:颜色映射

• alpha:散点图形透明度

返回值:

返回 PathCollection 对象。

示例:

x = [1,2,3,4,5]y = [5,7,6,8,7]
plt.scatter(x, y)plt.show()

说明:

散点图常用于观察两个变量之间的关系,例如回归分析、相关性分析等。

bar()

用于绘制柱状图(Bar Chart)。

plt.bar(    x,    height,    width=0.8,    color=None,    align="center",    alpha=None)

参数说明:

• x:柱子位置或类别标签

• height:柱子的高度

• width:柱子宽度

• color:柱子颜色

• align:对齐方式

• alpha:图形元素透明度

返回:

返回 BarContainer 对象。

示例:

categories = ["A", "B", "C", "D"]values = np.random.randint(10, 30, 4)
plt.bar(categories, values)
plt.show()

说明:

柱状图常用于比较不同类别的数据。

hist()

用于绘制直方图(Histogram)。

plt.hist(    x,    bins=10,    range=None,    density=False,    color=None,    alpha=None)

参数说明:

• x:输入数据序列

• bins:分箱数量

• range:统计范围

• density:指定是否归一化为概率密度

• color:指定颜色

• alpha:指定透明度

返回:

返回三个对象 (n, bins, patches):

n:每个区间的计数值bins:区间边界数组patches:绘制的矩形对象集合

示例:

data = np.random.normal(0, 1, 1000)
plt.hist(data, bins=30)plt.show()

说明:

直方图常用于观察数据分布,例如判断数据是否接近正态分布。

pie()

用于绘制饼图(Pie Chart)。

plt.pie(    x,    labels=None,    autopct=None,    startangle=0)

参数说明:

• x:各部分的数据值

• labels:指定标签

• autopct:指定百分比显示格式,例如 "%1.1f%%"

• startangle:指定饼图起始角度

示例:

sizes = [30, 40, 30]labels = ["A", "B", "C"]
plt.pie(sizes, labels=labels, autopct="%1.1f%%")plt.show()

说明:

饼图常用于展示各部分在整体中的比例关系。

三、图形结构函数

在 Matplotlib 中,可以通过多种方式创建图形对象与子图。

figure()

用于创建图形对象。

plt.figure(figsize=None, dpi=None)

参数说明:

• figsize:用于指定图形尺寸,单位为英寸

• dpi:图像分辨率

示例:

plt.figure(figsize=(6,4))
x = np.linspace(0,5,100)plt.plot(x, x**2)
plt.show()

subplot()

用于创建子图。

plt.subplot(nrows, ncols, index)

参数说明:

• nrows:子图行数

• ncols :子图列数

• index:当前子图编号

示例:

x = np.linspace(0,10,100)
plt.subplot(1,2,1)plt.plot(x, np.sin(x))
plt.subplot(1,2,2)plt.plot(x, np.cos(x))
plt.show()

subplots()

用于同时创建 Figure 与 Axes。

fig, ax = plt.subplots(nrows=1, ncols=1)

示例:

x = np.linspace(0,10,100)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x))plt.show()

这种方式是 Matplotlib 官方推荐的绘图方式。

四、图形元素函数

绘制图形后,通常需要添加标题、标签、图例等元素。

title()

设置图标题。

plt.title(label, fontsize=None, loc=None)

参数说明:

• label:标题内容

• fontsize:指定字体大小

• loc:指定标题位置

xlabel() / ylabel()

设置坐标轴标签。

plt.xlabel(label)plt.ylabel(label)

legend()

显示图例。

plt.legend()

示例:

x = np.arange(5)
plt.plot(x, x, label="A")plt.plot(x, x**2, label="B")
plt.legend()plt.show()

grid()

显示网格。

plt.grid(True)

网格可以帮助读者更容易估计数据位置。

tight_layout()

自动调整子图间距,避免标签或标题重叠。

plt.tight_layout()

五、图像输出函数

savefig()

用于将图形保存为文件。

plt.savefig(    fname,    dpi=None,    bbox_inches=None,    transparent=False)

参数说明:

• fname:文件名

• dpi:图像分辨率

• bbox_inches:指定是否自动裁剪空白区域

• transparent:指定背景是否透明

示例:

plt.plot(np.arange(5), np.arange(5)**2)
plt.savefig("plot.png", dpi=300, bbox_inches="tight")plt.show()

上述代码会先将图形保存为文件,再显示图形窗口。

Matplotlib 支持导出多种图像格式,例如 PNG、PDF、SVG 和 JPG。

show()

用于显示图形窗口。

plt.show()

在普通 Python 脚本中通常需要调用 show() 才能显示图形窗口。

在 Jupyter Notebook 中,图形通常会自动显示。

六、简单数据可视化示例

在数据分析项目中,Matplotlib 常用于展示数据趋势、分布以及变量关系。

例如:

import matplotlib.pyplot as pltimport numpy as np
# 生成示例数据x = np.arange(0, 10)y = x ** 2
# 绘制折线图plt.plot(x, y, marker="o", label="y = x^2")
# 设置标题和标签plt.title("Example Function")plt.xlabel("x")plt.ylabel("y")
# 显示图例与网格plt.legend()plt.grid(True)
# 显示图形plt.show()

运行结果将得到一个函数曲线图。

这种图形在以下场景中非常常见:

• 数学函数可视化

• 机器学习训练曲线

• 时间序列趋势分析

• 实验数据展示

七、Matplotlib 后端控制与全局配置

Matplotlib 的图形系统不仅涉及绘图函数,还依赖于运行环境配置,这些配置通常在程序开始阶段进行设置。

1、后端控制

matplotlib.use()

Matplotlib 的图形显示依赖于图形后端(backend)。后端负责图形渲染、窗口显示以及图像输出。

matplotlib.use(backend)

参数说明:

• backend:后端名称字符串,例如:

"TkAgg":使用 Tk 图形界面"QtAgg":使用 Qt 图形界面"Agg":不显示图形窗口,仅用于生成图像文件

示例:

import matplotlibmatplotlib.use("Agg")import matplotlib.pyplot as plt

说明:

• Agg 后端通常用于:

• 服务器环境

• 批量生成图像

• 无图形界面的系统

需要注意的是,matplotlib.use() 必须在导入 pyplot 之前调用,否则设置不会生效。

2、全局配置

plt.rcParams

rcParams 是 Matplotlib 的全局配置参数系统。它本质上是一个字典对象,用于控制图形的默认行为。

plt.rcParams[key] = value

其中,常见的配置项名称 key 有:

plt.rcParams["font.sans-serif"] = ["SimHei"]  # 用于指定无衬线字体列表plt.rcParams["axes.unicode_minus"] = False    # 用于控制坐标轴中负号的显示方式plt.rcParams["figure.figsize"] = (6,4) # 用于设置默认图形尺寸plt.rcParams["figure.dpi"] = 120       # 用于设置图像默认分辨率plt.rcParams["lines.linewidth"] = 2    # 用于设置线条默认宽度plt.rcParams["grid.linestyle"] = "--"  # 用于设置网格线样式plt.rcParams["axes.titlesize"] = 14    # 用于设置图标题字体大小plt.rcParams["axes.labelsize"] = 12    # 用于设置坐标轴标签字体大小

Matplotlib 的所有配置项都存储在 rcParams 字典中,可以通过以下方式查看:

plt.rcParams

如果希望查看某一个参数的当前值,可以使用:

plt.rcParams["figure.figsize"]

在 Matplotlib 中,默认字体通常不包含中文字符,因此绘制包含中文的图形时可能出现乱码。

解决方法是通过 rcParams 指定中文字体。

示例:

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]  plt.rcParams["axes.unicode_minus"] = False

说明:

• font.sans-serif 用于指定无衬线字体列表。SimHei 是常见的中文字体(黑体)

• axes.unicode_minus 用于控制负号显示。如果设为 False,则使用普通字符 "-" 代替 Unicode 负号,以避免字体缺失导致的显示问题。

3、图形样式系统

plt.style.use()

除了通过 rcParams 设置单个参数外,Matplotlib 还提供了图形样式系统(style system),用于一次性应用整套图形风格。

plt.style.use(style_name)

参数说明:

• style_name 表示样式名称字符串,用于指定预设的图形风格。Matplotlib 内置了多种样式,例如:

"ggplot""seaborn-v0_8""bmh""classic""dark_background"

这些样式通常模仿常见统计软件或可视化工具的绘图风格。

示例:

import numpy as npimport matplotlib.pyplot as plt
plt.style.use("ggplot")
x = np.linspace(0, 10, 100)y = np.sin(x)
plt.plot(x, y)plt.title("Example Plot")plt.show()

运行后可以看到图形使用了类似 R 语言 ggplot2 的绘图风格。

plt.style.available

用于查看所有可用样式。

plt.style.available

不同版本的 Matplotlib 中,可用样式名称可能略有不同。

📘 小结

Matplotlib 是 Python 中最基础的数据可视化库,提供了折线图、散点图、柱状图、直方图等常见图形绘制功能。通过 plot()、scatter()、bar()、hist() 等常用函数,并结合 title()、legend()、grid() 等图形元素设置,可以较方便地构建数据分析与机器学习中的可视化展示流程。

图片

“点赞有美意,赞赏是鼓励”

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐