目录

一、Matplotlib 简介

1.1 什么是 Matplotlib?

1.2 Matplotlib 的模块结构

1.3 安装与导入

二、Matplotlib 的基本使用

2.1 创建第一个图表

2.2 支持的主要图表类型

三、图表类型详解

3.1 折线图(Line Plot)

3.2 散点图(Scatter Plot)

3.3 柱状图(Bar Chart)

3.4 饼图(Pie Chart)

3.5 直方图(Histogram)

3.6 箱线图(Boxplot)

3.7 热力图(Heatmap)

四、图形的高级设置

4.1 设置图形大小与分辨率

4.2 添加图例(Legend)

4.3 多图绘制(Subplots)

4.4 设置坐标轴范围

4.5 添加网格

4.6 设置标题与标签字体大小

4.7 设置坐标轴刻度

五、样式与主题设置

六、保存图表

七、Matplotlib 与 Seaborn 的关系

八、进阶技巧与实战建议

9.1 使用 Pandas 与 Matplotlib 结合

9.2 动态图表与动画

9.3 自定义样式与颜色

9.4 多图叠加与图层控制


在当今数据驱动的时代,数据可视化(Data Visualization)已成为数据科学、机器学习、金融分析、工程建模等多个领域中不可或缺的一环。数据可视化不仅帮助我们更直观地理解数据的分布和趋势,还能辅助决策、展示研究成果以及增强数据故事的表达力。

在 Python 生态中,Matplotlib 是最早、最基础也是最强大的数据可视化库之一。它不仅功能全面,而且可以高度定制化,适合科研、教学以及工业级应用。本文将从入门到进阶,系统地介绍 Matplotlib 的使用方法、核心功能、图形类型、样式设置、高级技巧以及与其他库的整合,帮助你全面掌握这一强大工具。


一、Matplotlib 简介

1.1 什么是 Matplotlib?

Matplotlib 是一个用于创建高质量图表的 Python 绘图库,由 John D. Hunter 于 2003 年开发。它受到 MATLAB 的启发,因此语法风格与 MATLAB 类似,适合用于科学研究和教学。Matplotlib 支持多种输出格式,包括 PNG、PDF、SVG、EPS 等,并可在多种操作系统上运行。

1.2 Matplotlib 的模块结构

Matplotlib 的架构分为多个层级,其中最常用的是:

  • pyplot 模块(plt):提供类似 MATLAB 的绘图接口,是大多数用户常用的接口。
  • FigureCanvas:负责将图形绘制到某个表面上(如 GUI 窗口、图像文件等)。
  • Artist:代表图形中的所有可视元素(如线条、文本、轴等)。
  • Backend:处理图形的输出,分为用户界面后端(如 TkAgg、Agg)和图像文件后端(如 PNG、PDF)。

1.3 安装与导入

Matplotlib 可以通过 pip 或 conda 安装:

pip install matplotlib

conda install matplotlib

导入方式通常为:

import matplotlib.pyplot as plt

二、Matplotlib 的基本使用

2.1 创建第一个图表

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

plt.plot(x, y)
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.title('我的第一个图表')
plt.show()

这个例子中,我们绘制了一个简单的折线图,并设置了坐标轴标签和标题。

2.2 支持的主要图表类型

Matplotlib 支持丰富的图表类型,包括但不限于:

图表类型 描述
折线图(Line Plot) 展示数据随时间或其他变量的变化趋势
散点图(Scatter Plot) 展示两个变量之间的关系
柱状图(Bar Chart) 对比不同类别的数据
饼图(Pie Chart) 展示整体中各部分的比例
直方图(Histogram) 显示数据分布情况
箱线图(Boxplot) 显示数据的分布与异常值
热力图(Heatmap) 展示二维数据矩阵的可视化
3D 图形(3D Plot) 展示三维空间中的数据关系

三、图表类型详解

3.1 折线图(Line Plot)

折线图是最基础的图表类型,适合展示连续数据的变化趋势。

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.plot(x, y, color='blue', linestyle='--', marker='o')
plt.title('折线图示例')
plt.xlabel('X 值')
plt.ylabel('Y 值')
plt.grid(True)
plt.show()

3.2 散点图(Scatter Plot)

散点图用于展示两个变量之间的关系,常用于探索数据之间的相关性。

import numpy as np

x = np.random.rand(50)
y = np.random.rand(50)

plt.scatter(x, y, c='red', s=50, alpha=0.6)
plt.title('散点图')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

3.3 柱状图(Bar Chart)

柱状图适用于比较不同类别之间的数据。

categories = ['A', 'B', 'C', 'D']
values = [3, 7, 4, 5]

plt.bar(categories, values, color='skyblue')
plt.title('柱状图')
plt.xlabel('类别')
plt.ylabel('数值')
plt.show()

3.4 饼图(Pie Chart)

饼图用于展示各部分在整体中的占比。

labels = ['A', 'B', 'C', 'D']
sizes = [25, 35, 20, 20]
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title('饼图')
plt.axis('equal')  # 保持饼图为圆形
plt.show()

3.5 直方图(Histogram)

直方图用于展示数据的分布情况。

data = np.random.randn(1000)
plt.hist(data, bins=30, color='green', edgecolor='black', alpha=0.7)
plt.title('直方图')
plt.xlabel('值')
plt.ylabel('频数')
plt.show()

3.6 箱线图(Boxplot)

箱线图用于展示数据的统计分布,包括中位数、四分位数和异常值。

data = np.random.normal(loc=0.0, scale=1.0, size=100)
plt.boxplot(data)
plt.title('箱线图')
plt.ylabel('值')
plt.show()

3.7 热力图(Heatmap)

热力图用于展示二维数据矩阵,颜色深浅表示数值大小。

import seaborn as sns

data = np.random.rand(5, 5)
sns.heatmap(data, annot=True, cmap='coolwarm')
plt.title('热力图')
plt.show()


四、图形的高级设置

4.1 设置图形大小与分辨率

plt.figure(figsize=(10, 6), dpi=100)

4.2 添加图例(Legend)

plt.plot(x, y1, label='线1')
plt.plot(x, y2, label='线2')
plt.legend()

4.3 多图绘制(Subplots)

fig, axs = plt.subplots(2, 2)
axs[0, 0].plot(x, y)
axs[0, 1].scatter(x, y)
axs[1, 0].bar(categories, values)
axs[1, 1].pie(sizes, labels=labels)
plt.tight_layout()
plt.show()

4.4 设置坐标轴范围

plt.xlim(0, 6)
plt.ylim(0, 30)

4.5 添加网格

plt.grid(True, linestyle='--', alpha=0.5)

4.6 设置标题与标签字体大小

plt.title('标题', fontsize=16)
plt.xlabel('X 轴', fontsize=12)
plt.ylabel('Y 轴', fontsize=12)

4.7 设置坐标轴刻度

plt.xticks(range(1, 6))
plt.yticks(range(0, 30, 5))

五、样式与主题设置

Matplotlib 提供了多种内置样式,可以通过 plt.style.use() 来切换:

plt.style.use('ggplot')  # 使用 ggplot 风格

常用样式包括:

  • 'default'(默认样式)
  • 'ggplot'(模仿 R 的 ggplot2)
  • 'seaborn'(Seaborn 风格)
  • 'dark_background'(暗色背景)
  • 'bmh'(适合论文的样式)

你也可以使用 Seaborn 等第三方库来进一步美化图表。


六、保存图表

使用 plt.savefig() 可以将图表保存为图片文件:

plt.savefig('my_plot.png', dpi=300, bbox_inches='tight')

支持的格式包括:

  • PNG(默认)
  • PDF
  • SVG
  • EPS
  • JPEG

七、Matplotlib 与 Seaborn 的关系

Seaborn 是基于 Matplotlib 构建的高级库,专注于统计图表的美观展示。它简化了许多绘图流程,并提供了更现代、更美观的默认样式。

例如,使用 Seaborn 绘制箱线图:

import seaborn as sns

sns.boxplot(x='类别', y='数值', data=df)
plt.title('Seaborn 箱线图')
plt.show()

尽管 Seaborn 更加易用,但理解 Matplotlib 的底层机制仍然是掌握数据可视化的关键。


八、进阶技巧与实战建议

9.1 使用 Pandas 与 Matplotlib 结合

Pandas 提供了对 Matplotlib 的封装接口,使得数据可视化更加简洁。

import pandas as pd

df = pd.DataFrame({'x': x, 'y': y})
df.plot(x='x', y='y', kind='line')
plt.title('Pandas 绘图')
plt.show()

9.2 动态图表与动画

Matplotlib 支持动态图表的绘制,适合实时数据监控。

from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots()
x, y = [], []

def update(frame):
    x.append(frame)
    y.append(np.sin(frame))
    ax.clear()
    ax.plot(x, y)

ani = FuncAnimation(fig, update, frames=np.linspace(0, 10, 100), interval=50)
plt.show()

9.3 自定义样式与颜色

你可以通过设置 rcParams 来全局更改图表样式:

import matplotlib as mpl

mpl.rcParams['lines.linewidth'] = 2
mpl.rcParams['axes.facecolor'] = 'lightgray'

9.4 多图叠加与图层控制

使用 plt.axes()add_subplot() 可以灵活控制图层。

fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)

ax1.plot(x, y)
ax2.scatter(x, y)
plt.show()
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐