Bootstrap

【科研绘图】Matplotlib 教学

以下是一个针对 Matplotlib 教学 的博客结构,按照分步骤教学方式撰写,以帮助读者从基础到高级逐步掌握 Matplotlib。


Matplotlib 教学:从基础到进阶绘图

Matplotlib 是 Python 中功能强大的数据可视化库,可以用来绘制多种类型的图表,如折线图、散点图、柱状图等。本博客将带你从基础设置到高级技巧,逐步掌握 Matplotlib 的使用。



1. Matplotlib 简介与安装

什么是 Matplotlib?

Matplotlib 是 Python 中最流行的数据可视化库之一,特别适合静态图表绘制。它有着灵活的 API,可以轻松实现定制化的图表。

安装 Matplotlib

你可以通过以下命令安装 Matplotlib:

pip install matplotlib

安装完成后,我们就可以开始绘图了。


2. Matplotlib 基础:画出你的第一个图

导入库并创建简单折线图

绘图的核心是 pyplot 模块,我们用它绘制图表:

import matplotlib.pyplot as plt

# 数据
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]

# 绘图
plt.plot(x, y)

# 添加标题和标签
plt.title("Simple Line Plot")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")

# 显示图像
plt.show()

运行后会显示一张简单的折线图。
在这里插入图片描述


3. 调整图像样式:标题、坐标轴和标记

一个好的图表需要清晰的标题和标记,以下是如何调整样式的例子。

添加标题和坐标轴标签

plt.title("Square Numbers", fontsize=20)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

设置刻度标记

可以通过 tick_params() 自定义刻度标记的样式:

参数名称功能描述示例值
axis指定修改哪一个轴的刻度:'x''y''both''both'
labelsize设置刻度标签字体的大小12
direction设置刻度的方向:'in'(向内)、'out'(向外)或 'inout''in'
length设置刻度线的长度6
width设置刻度线的宽度2
colors设置刻度和刻度标签的颜色'purple'
grid_color设置网格线的颜色'blue'
grid_alpha设置网格线的透明度0.5

以下列为例:

plt.tick_params(axis='both', labelsize=12, direction='in', length=6, width=2, colors='purple')

运行效果
代码运行后,你将看到一张带有以下刻度样式的折线图:

  • 刻度线向内 (direction=‘in’)。
  • 刻度线长度为 6,宽度为 2 (length=6, width=2)。
  • 刻度线和刻度标签为紫色 (colors=‘purple’)。
  • 刻度标签字体大小为 12 (labelsize=12)。

在这里插入图片描述

调整线条样式

可以通过参数自定义线条颜色、样式和宽度:

plt.plot(x, y, color='red', linewidth=2, linestyle='--')

在这里插入图片描述

绘制网格图

plt.tick_params(grid_color='blue', grid_alpha=0.5, axis='both', labelsize=12, direction='in', length=6, width=2, colors='purple')

参数介绍:

  • grid_color 设置网格线的颜色 ‘blue’
  • grid_alpha 设置网格线的透明度 0.5

启动网格图绘制:

plt.grid(True)

在这里插入图片描述


4. 绘制多种图表类型

4.1 折线图

折线图是最基本的图表,用于展示趋势:

plt.plot(x, y, label='Line')
plt.legend()

4.2 散点图

用于显示点与点之间的关系:

plt.scatter(x, y, s=100, c='blue', alpha=0.5)

其中s=100表示散点图中点的面积大小。

4.3 柱状图

展示分类数据的分布:

plt.bar(['A', 'B', 'C'], [5, 7, 9], color='purple')

4.4 饼图

适合展示比例关系:

plt.pie([20, 30, 50], labels=['A', 'B', 'C'], autopct='%1.1f%%')

5. 子图布局:subplots 的使用

在一个画布中绘制多张图表,可以使用 plt.subplot()plt.subplots()

使用 subplot

plt.subplot(121)  # 创建第1个子图(1行2列中的第1个图)
plt.plot(x, y)

plt.subplot(122)  # 创建第2个子图
plt.scatter(x, y)
plt.show()

使用 subplots

更灵活的子图方法:

fig, ax = plt.subplots(2, 2)  # 创建2行2列的子图
ax[0, 0].plot(x, y)
ax[1, 1].scatter(x, y)
plt.show()

6. 高级技巧:颜色映射与3D图

颜色映射

使用 cmap 创建渐变色散点图:

plt.scatter(x, y, c=y, cmap='viridis', s=50)
plt.colorbar()

常用的颜色映射:

Matplotlib 提供了多种内置的颜色映射,可以通过 cmap 参数设置。以下是几种常见的颜色映射:

  • viridis:一种渐变色映射,从黄色到紫色,适用于展示数值范围。
  • plasma:从黄色到紫红色的渐变色,比 viridis 更加鲜艳。
  • inferno:从黑色到亮黄色的颜色映射,非常适合暗背景的图表。
  • coolwarm:从蓝色到红色的渐变,常用于展示具有正负值对比的场景。
  • jet:经典的彩虹色映射,但在视觉上不如 viridis 清晰。
  • cividis:一种色盲友好的颜色映射。

你可以尝试不同的 cmap 参数来查看不同颜色映射的效果。例如:

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 100)  # x 是 0 到 10 之间 100 个等差数列
y = np.sin(x)  # y 是 x 的正弦函数

# 自定义函数用于创建散点图
def create_scatter_plot(ax, x, y, cmap, title):
    scatter = ax.scatter(x, y, c=y, cmap=cmap, s=20)
    ax.set_xlabel(title)
    plt.colorbar(scatter, ax=ax)

# 创建2行3列的子图
fig, axs = plt.subplots(2, 3, figsize=(15, 10))

# 色图列表
colormaps = ['viridis', 'plasma', 'cividis', 'coolwarm', 'jet', 'Greys']

# 遍历每个子图和色图
for ax, cmap in zip(axs.flatten(), colormaps):
    create_scatter_plot(ax, x, y, cmap, cmap)
'''
其中 axs.flatten() 
将二维的 axes 数组展平为一维数组,使得你可以像访问普通列表一样,访问每个子图。
'''

# 设置子图间距
plt.tight_layout()

# 显示图形
plt.show()

在这里插入图片描述

绘制 3D 图

通过 mpl_toolkits.mplot3d 模块:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

# 生成数据
x = np.linspace(0, 30, 300)  # x 是 0 到 30 之间 300 个等差数列
y = np.sin(x)  # y 是 x 的正弦函数
z = np.cos(x)  # z 是 x 的余弦函数

# 创建图形对象
fig = plt.figure(figsize=(10, 8))  # 设置图形大小
ax = fig.add_subplot(111, projection='3d')

# 绘制散点图,设置点的颜色映射
sc = ax.scatter(x, y, z, c=z, cmap='coolwarm', s=50, alpha=0.7, edgecolors='w')

# 设置坐标轴标签
ax.set_xlabel('X', fontsize=14, color='darkblue')
ax.set_ylabel('Y', fontsize=14, color='darkblue')
ax.set_zlabel('Z', fontsize=14, color='darkblue')

# 设置标题
ax.set_title('3D Scatter Plot of sin(x) and cos(x)', fontsize=16, color='darkred')

# 添加颜色条
cbar = plt.colorbar(sc)
cbar.set_label('Cosine Values (Z)', fontsize=12)

# 调整视角
ax.view_init(elev=30, azim=60)  # 设置视角(高度、方位角)

# 增加网格
ax.grid(True, linestyle='--', color='gray', alpha=0.5)

# 显示图形
plt.show()

在这里插入图片描述


7. 保存图表与输出优化

保存图表

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

优化输出

  • 设置更高的 DPI 提高分辨率。
  • 使用 bbox_inches='tight' 去除多余边框。

8. 总结与资源推荐

总结

Matplotlib 是一个功能强大的工具,本教程介绍了从基础到高级的用法。建议大家多动手练习,逐步掌握每个模块。

推荐资源

希望你喜欢本次的 Matplotlib 教学博客!

;