【科研绘图】Matplotlib 教学

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


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

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


目录

  • [Matplotlib 教学:从基础到进阶绘图](#Matplotlib 教学:从基础到进阶绘图)
    • [1. Matplotlib 简介与安装](#1. Matplotlib 简介与安装)
      • [什么是 Matplotlib?](#什么是 Matplotlib?)
      • [安装 Matplotlib](#安装 Matplotlib)
    • [2. Matplotlib 基础:画出你的第一个图](#2. Matplotlib 基础:画出你的第一个图)
    • [3. 调整图像样式:标题、坐标轴和标记](#3. 调整图像样式:标题、坐标轴和标记)
    • [4. 绘制多种图表类型](#4. 绘制多种图表类型)
      • [4.1 折线图](#4.1 折线图)
      • [4.2 散点图](#4.2 散点图)
      • [4.3 柱状图](#4.3 柱状图)
      • [4.4 饼图](#4.4 饼图)
    • [5. 子图布局:subplots 的使用](#5. 子图布局:subplots 的使用)
      • [使用 `subplot`](#使用 subplot)
      • [使用 `subplots`](#使用 subplots)
    • [6. 高级技巧:颜色映射与3D图](#6. 高级技巧:颜色映射与3D图)
    • [7. 保存图表与输出优化](#7. 保存图表与输出优化)
    • [8. 总结与资源推荐](#8. 总结与资源推荐)

1. Matplotlib 简介与安装

什么是 Matplotlib?

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

安装 Matplotlib

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

bash 复制代码
pip install matplotlib

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


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

导入库并创建简单折线图

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

python 复制代码
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. 调整图像样式:标题、坐标轴和标记

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

添加标题和坐标轴标签

python 复制代码
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

以下列为例:

python 复制代码
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)。

调整线条样式

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

python 复制代码
plt.plot(x, y, color='red', linewidth=2, linestyle='--')

绘制网格图

python 复制代码
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

启动网格图绘制:

python 复制代码
plt.grid(True)

4. 绘制多种图表类型

4.1 折线图

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

python 复制代码
plt.plot(x, y, label='Line')
plt.legend()

4.2 散点图

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

python 复制代码
plt.scatter(x, y, s=100, c='blue', alpha=0.5)

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

4.3 柱状图

展示分类数据的分布:

python 复制代码
plt.bar(['A', 'B', 'C'], [5, 7, 9], color='purple')

4.4 饼图

适合展示比例关系:

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

5. 子图布局:subplots 的使用

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

使用 subplot

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

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

使用 subplots

更灵活的子图方法:

python 复制代码
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 创建渐变色散点图:

python 复制代码
plt.scatter(x, y, c=y, cmap='viridis', s=50)
plt.colorbar()

常用的颜色映射:

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

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

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

python 复制代码
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 模块:

python 复制代码
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. 保存图表与输出优化

保存图表

python 复制代码
plt.savefig('output.png', dpi=300, bbox_inches='tight')

优化输出

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

8. 总结与资源推荐

总结

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

推荐资源

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

相关推荐
eclipsercp5 小时前
【数据可视化入门】Python散点图全攻略:Matplotlib、Seaborn、Pyecharts实战代码大公开!
python·信息可视化·matplotlib
敲代码不忘补水2 天前
Python Matplotlib 经典 3D 绘图类型:从二维到三维的可视化解析
开发语言·python·3d·数据分析·numpy·pandas·matplotlib
如若1235 天前
利用 `OpenCV` 和 `Matplotlib` 库进行图像读取、颜色空间转换、掩膜创建、颜色替换
人工智能·opencv·matplotlib
敲代码不忘补水6 天前
Python Matplotlib 数据可视化全面解析:选择它的七大理由与入门简介
开发语言·python·信息可视化·numpy·pandas·matplotlib
c无序7 天前
数据可视化复习1-Matplotlib简介属性和创建子图
信息可视化·matplotlib
敲代码不忘补水8 天前
pandas 机器学习数据预处理:从缺失值到特征切分的全面解析
人工智能·后端·python·机器学习·numpy·pandas·matplotlib
NiNg_1_2348 天前
Python中Matplotlib详解
开发语言·python·matplotlib
两千连弹11 天前
计算机视觉 ---图像读取与显示(OpenCV与Matplotlib)
opencv·计算机视觉·matplotlib
zqzgng13 天前
Matplotlib库中show()函数的用法
matplotlib