Matplotlib 完整教程
目录
-
成对数据 (Pairwise Data)
-
统计分布 (Statistical Distributions)
-
网格数据 (Gridded Data)
-
非规则网格数据 (Irregularly Gridded Data)
-
3D和体数据 (3D and Volumetric Data)
-
极坐标和特殊坐标 (Polar and Special Coordinates)
-
其他特殊图形 (Other Special Plots)
1. 成对数据 (Pairwise Data)
1.1 折线图 (Line Plot)
python
复制代码
#!/usr/bin/env python3
"""
折线图示例
使用 plot() 函数创建连续数据的折线图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制折线
ax.plot(x, y, color='blue', linewidth=2, label='sin(x)')
# 添加标题和标签
ax.set_title('折线图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 添加图例
ax.legend(fontsize=12)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()
1.2 散点图 (Scatter Plot)
python
复制代码
#!/usr/bin/env python3
"""
散点图示例
使用 scatter() 函数创建离散数据的散点图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
np.random.seed(42)
x = np.random.randn(100)
y = np.random.randn(100)
colors = np.random.rand(100)
sizes = 50 * np.random.rand(100)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制散点图
scatter = ax.scatter(x, y, c=colors, s=sizes, alpha=0.7, cmap='viridis')
# 添加颜色条
cbar = plt.colorbar(scatter, ax=ax)
cbar.set_label('颜色映射', fontsize=12)
# 添加标题和标签
ax.set_title('散点图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()
1.3 条形图 (Bar Plot)
python
复制代码
#!/usr/bin/env python3
"""
条形图示例
使用 bar() 函数创建垂直条形图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [10, 25, 15, 30, 20]
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制条形图
ax.bar(categories, values, color='skyblue', edgecolor='black')
# 添加标题和标签
ax.set_title('条形图示例', fontsize=16)
ax.set_xlabel('类别', fontsize=14)
ax.set_ylabel('值', fontsize=14)
# 添加数值标签
for i, v in enumerate(values):
ax.text(i, v + 0.5, str(v), ha='center', fontsize=12)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7, axis='y')
# 显示图形
plt.tight_layout()
plt.show()
1.4 水平条形图 (Horizontal Bar Plot)
python
复制代码
#!/usr/bin/env python3
"""
水平条形图示例
使用 barh() 函数创建水平条形图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [10, 25, 15, 30, 20]
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制水平条形图
ax.barh(categories, values, color='lightgreen', edgecolor='black')
# 添加标题和标签
ax.set_title('水平条形图示例', fontsize=16)
ax.set_xlabel('值', fontsize=14)
ax.set_ylabel('类别', fontsize=14)
# 添加数值标签
for i, v in enumerate(values):
ax.text(v + 0.5, i, str(v), va='center', fontsize=12)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7, axis='x')
# 显示图形
plt.tight_layout()
plt.show()
1.5 填充区域图 (Fill Between)
python
复制代码
#!/usr/bin/env python3
"""
填充区域图示例
使用 fill_between() 函数创建区域填充图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制折线
ax.plot(x, y1, color='blue', linewidth=2, label='sin(x)')
ax.plot(x, y2, color='red', linewidth=2, label='cos(x)')
# 填充区域
ax.fill_between(x, y1, y2, where=(y1 > y2), color='blue', alpha=0.3)
ax.fill_between(x, y1, y2, where=(y1 <= y2), color='red', alpha=0.3)
# 添加标题和标签
ax.set_title('填充区域图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 添加图例
ax.legend(fontsize=12)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()
1.6 阶梯图 (Step Plot)
python
复制代码
#!/usr/bin/env python3
"""
阶梯图示例
使用 step() 函数创建阶梯状折线图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(0, 10, 20)
y = np.sin(x)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制阶梯图
ax.step(x, y, color='purple', linewidth=2, label='sin(x)', where='mid')
# 添加标题和标签
ax.set_title('阶梯图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 添加图例
ax.legend(fontsize=12)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()
1.7 堆叠图 (Stack Plot)
python
复制代码
#!/usr/bin/env python3
"""
堆叠图示例
使用 stackplot() 函数创建堆叠面积图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) * 0.5
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制堆叠图
ax.stackplot(x, y1, y2, y3, labels=['sin(x)', 'cos(x)', 'sin(x)*0.5'], colors=['blue', 'red', 'green'])
# 添加标题和标签
ax.set_title('堆叠图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 添加图例
ax.legend(fontsize=12, loc='upper right')
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()
2. 统计分布 (Statistical Distributions)
2.1 直方图 (Histogram)
python
复制代码
#!/usr/bin/env python3
"""
直方图示例
使用 hist() 函数创建数据分布的直方图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
np.random.seed(42)
data = np.random.normal(0, 1, 1000)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制直方图
n, bins, patches = ax.hist(data, bins=30, density=True, alpha=0.7, color='skyblue', edgecolor='black')
# 添加标题和标签
ax.set_title('直方图示例', fontsize=16)
ax.set_xlabel('值', fontsize=14)
ax.set_ylabel('密度', fontsize=14)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7, axis='y')
# 显示图形
plt.tight_layout()
plt.show()
2.2 二维直方图 (2D Histogram)
python
复制代码
#!/usr/bin/env python3
"""
二维直方图示例
使用 hist2d() 函数创建二维数据的密度图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
np.random.seed(42)
x = np.random.normal(0, 1, 1000)
y = np.random.normal(0, 1, 1000)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 绘制二维直方图
hist = ax.hist2d(x, y, bins=30, cmap='viridis')
# 添加颜色条
cbar = plt.colorbar(hist[3], ax=ax)
cbar.set_label('频率', fontsize=12)
# 添加标题和标签
ax.set_title('二维直方图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
2.3 箱线图 (Box Plot)
python
复制代码
#!/usr/bin/env python3
"""
箱线图示例
使用 boxplot() 函数创建数据分布的箱线图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
np.random.seed(42)
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(2, 1, 100)
data3 = np.random.normal(-2, 1, 100)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制箱线图 - 使用新参数名 tick_labels
boxplot = ax.boxplot([data1, data2, data3], tick_labels=['数据集1', '数据集2', '数据集3'])
# 添加标题和标签
ax.set_title('箱线图示例', fontsize=16)
ax.set_xlabel('数据集', fontsize=14)
ax.set_ylabel('值', fontsize=14)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7, axis='y')
# 显示图形
plt.tight_layout()
plt.show()
2.4 小提琴图 (Violin Plot)
python
复制代码
#!/usr/bin/env python3
"""
小提琴图示例
使用 violinplot() 函数创建数据分布的小提琴图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
np.random.seed(42)
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(2, 1, 100)
data3 = np.random.normal(-2, 1, 100)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制小提琴图
violinplot = ax.violinplot([data1, data2, data3], showmedians=True)
# 设置标签
ax.set_xticks([1, 2, 3])
ax.set_xticklabels(['数据集1', '数据集2', '数据集3'])
# 添加标题和标签
ax.set_title('小提琴图示例', fontsize=16)
ax.set_xlabel('数据集', fontsize=14)
ax.set_ylabel('值', fontsize=14)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7, axis='y')
# 显示图形
plt.tight_layout()
plt.show()
3. 网格数据 (Gridded Data)
3.1 伪彩色图 (Pseudo Color Mesh)
python
复制代码
#!/usr/bin/env python3
"""
伪彩色图示例
使用 pcolormesh() 函数创建不规则网格的彩色图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 绘制伪彩色图
pcm = ax.pcolormesh(X, Y, Z, cmap='viridis')
# 添加颜色条
cbar = plt.colorbar(pcm, ax=ax)
cbar.set_label('Z 值', fontsize=12)
# 添加标题和标签
ax.set_title('伪彩色图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
3.2 等高线图 (Contour Plot)
python
复制代码
#!/usr/bin/env python3
"""
等高线图示例
使用 contour() 函数创建等高线
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 绘制等高线
contour = ax.contour(X, Y, Z, levels=20, cmap='viridis')
# 添加等高线标签
ax.clabel(contour, inline=True, fontsize=10)
# 添加颜色条
cbar = plt.colorbar(contour, ax=ax)
cbar.set_label('Z 值', fontsize=12)
# 添加标题和标签
ax.set_title('等高线图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
3.3 填充等高线图 (Filled Contour Plot)
python
复制代码
#!/usr/bin/env python3
"""
填充等高线图示例
使用 contourf() 函数创建填充等高线
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 绘制填充等高线
contourf = ax.contourf(X, Y, Z, levels=20, cmap='viridis')
# 添加颜色条
cbar = plt.colorbar(contourf, ax=ax)
cbar.set_label('Z 值', fontsize=12)
# 添加标题和标签
ax.set_title('填充等高线图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
3.4 图像显示 (Image Show)
python
复制代码
#!/usr/bin/env python3
"""
图像显示示例
使用 imshow() 函数显示图像或二维数组
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 显示图像
im = ax.imshow(Z, cmap='viridis', extent=[-10, 10, -10, 10], origin='lower')
# 添加颜色条
cbar = plt.colorbar(im, ax=ax)
cbar.set_label('Z 值', fontsize=12)
# 添加标题和标签
ax.set_title('图像显示示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
3.5 矢量场图 (Quiver Plot)
python
复制代码
#!/usr/bin/env python3
"""
矢量场图示例
使用 quiver() 函数创建箭头表示矢量场
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-5, 5, 20)
y = np.linspace(-5, 5, 20)
X, Y = np.meshgrid(x, y)
U = -Y
V = X
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 绘制矢量场
quiver = ax.quiver(X, Y, U, V, scale=50, color='blue', alpha=0.7)
# 添加标题和标签
ax.set_title('矢量场图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 设置坐标轴范围
ax.set_xlim(-6, 6)
ax.set_ylim(-6, 6)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()
3.6 流线图 (Stream Plot)
python
复制代码
#!/usr/bin/env python3
"""
流线图示例
使用 streamplot() 函数创建流体动力学风格的流场
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
U = -Y
V = X
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 绘制流线图
stream = ax.streamplot(X, Y, U, V, density=1.5, color='blue', linewidth=1, arrowstyle='->')
# 添加标题和标签
ax.set_title('流线图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 设置坐标轴范围
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 5)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()
3.7 条形等高线 (Barbs Plot)
python
复制代码
#!/usr/bin/env python3
"""
条形等高线示例
使用 barbs() 函数创建风场符号图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-5, 5, 10)
y = np.linspace(-5, 5, 10)
X, Y = np.meshgrid(x, y)
U = np.random.randn(10, 10) * 5
V = np.random.randn(10, 10) * 5
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 绘制条形等高线
barbs = ax.barbs(X, Y, U, V, length=6, color='blue')
# 添加标题和标签
ax.set_title('条形等高线示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 设置坐标轴范围
ax.set_xlim(-6, 6)
ax.set_ylim(-6, 6)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()
4. 非规则网格数据 (Irregularly Gridded Data)
4.1 三角网格图 (Triplot)
python
复制代码
#!/usr/bin/env python3
"""
三角网格图示例
使用 triplot() 函数创建非结构化三角网格
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
np.random.seed(42)
x = np.random.rand(30)
y = np.random.rand(30)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制三角网格
ax.triplot(x, y, color='blue', linewidth=1)
# 绘制原始数据点
ax.scatter(x, y, color='red', s=50)
# 添加标题和标签
ax.set_title('三角网格图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()
4.2 三角网格彩色图 (Tripcolor)
python
复制代码
#!/usr/bin/env python3
"""
三角网格彩色图示例
使用 tripcolor() 函数创建带颜色的三角网格
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
np.random.seed(42)
x = np.random.rand(30)
y = np.random.rand(30)
z = np.sin(3 * x) * np.cos(3 * y)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制三角网格彩色图
tripcolor = ax.tripcolor(x, y, z, cmap='viridis')
# 添加颜色条
cbar = plt.colorbar(tripcolor, ax=ax)
cbar.set_label('z 值', fontsize=12)
# 绘制原始数据点
ax.scatter(x, y, color='white', s=20, edgecolor='black')
# 添加标题和标签
ax.set_title('三角网格彩色图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
4.3 三角网格等高线图 (Tricontour)
python
复制代码
#!/usr/bin/env python3
"""
三角网格等高线图示例
使用 tricontour() 函数创建三角网格的等高线
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
np.random.seed(42)
x = np.random.rand(30)
y = np.random.rand(30)
z = np.sin(3 * x) * np.cos(3 * y)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制三角网格等高线
tricontour = ax.tricontour(x, y, z, levels=10, cmap='viridis')
# 添加等高线标签
ax.clabel(tricontour, inline=True, fontsize=10)
# 添加颜色条
cbar = plt.colorbar(tricontour, ax=ax)
cbar.set_label('z 值', fontsize=12)
# 绘制原始数据点
ax.scatter(x, y, color='red', s=30)
# 添加标题和标签
ax.set_title('三角网格等高线图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
4.4 网格插值 (Griddata)
python
复制代码
#!/usr/bin/env python3
"""
网格插值示例
使用 griddata() 函数将非规则数据插值到规则网格
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
np.random.seed(42)
x = np.random.rand(50)
y = np.random.rand(50)
z = np.sin(3 * x) * np.cos(3 * y)
# 创建规则网格
xi = np.linspace(0, 1, 100)
yi = np.linspace(0, 1, 100)
XI, YI = np.meshgrid(xi, yi)
# 插值到规则网格
from scipy.interpolate import griddata
zi = griddata((x, y), z, (XI, YI), method='cubic')
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制插值结果
im = ax.imshow(zi, extent=[0, 1, 0, 1], origin='lower', cmap='viridis')
# 添加颜色条
cbar = plt.colorbar(im, ax=ax)
cbar.set_label('z 值', fontsize=12)
# 绘制原始数据点
ax.scatter(x, y, color='red', s=30)
# 添加标题和标签
ax.set_title('网格插值示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
5. 3D和体数据 (3D and Volumetric Data)
5.1 3D折线图 (3D Line Plot)
python
复制代码
#!/usr/bin/env python3
"""
3D 折线图示例
使用 plot3D() 函数创建三维线图
"""
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
t = np.linspace(0, 10, 100)
x = np.sin(t)
y = np.cos(t)
z = t
# 创建图形和 3D 坐标轴
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# 绘制 3D 折线
ax.plot3D(x, y, z, color='blue', linewidth=2, label='3D 折线')
# 添加标题和标签
ax.set_title('3D 折线图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
# 添加图例
ax.legend(fontsize=12)
# 显示图形
plt.tight_layout()
plt.show()
5.2 3D散点图 (3D Scatter Plot)
python
复制代码
#!/usr/bin/env python3
"""
3D 散点图示例
使用 scatter3D() 函数创建三维散点图
"""
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
np.random.seed(42)
x = np.random.randn(100)
y = np.random.randn(100)
z = np.random.randn(100)
colors = np.random.rand(100)
sizes = 50 * np.random.rand(100)
# 创建图形和 3D 坐标轴
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# 绘制 3D 散点
scatter = ax.scatter3D(x, y, z, c=colors, s=sizes, alpha=0.7, cmap='viridis')
# 添加颜色条
cbar = plt.colorbar(scatter, ax=ax)
cbar.set_label('颜色映射', fontsize=12)
# 添加标题和标签
ax.set_title('3D 散点图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
5.3 3D表面图 (3D Surface Plot)
python
复制代码
#!/usr/bin/env python3
"""
3D 表面图示例
使用 plot_surface() 函数创建三维曲面
"""
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建图形和 3D 坐标轴
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# 绘制 3D 表面
surface = ax.plot_surface(X, Y, Z, cmap='viridis', alpha=0.8)
# 添加颜色条
cbar = plt.colorbar(surface, ax=ax)
cbar.set_label('Z 值', fontsize=12)
# 添加标题和标签
ax.set_title('3D 表面图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
5.4 3D线框图 (3D Wireframe Plot)
python
复制代码
#!/usr/bin/env python3
"""
3D 线框图示例
使用 plot_wireframe() 函数创建三维网格线框
"""
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-5, 5, 20)
y = np.linspace(-5, 5, 20)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建图形和 3D 坐标轴
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# 绘制 3D 线框
wireframe = ax.plot_wireframe(X, Y, Z, color='blue', linewidth=0.5)
# 添加标题和标签
ax.set_title('3D 线框图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
5.5 3D等高线图 (3D Contour Plot)
python
复制代码
#!/usr/bin/env python3
"""
3D 等高线图示例
使用 contour3D() 函数创建三维等高线
"""
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建图形和 3D 坐标轴
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# 绘制 3D 等高线
contour = ax.contour3D(X, Y, Z, levels=20, cmap='viridis')
# 添加颜色条
cbar = plt.colorbar(contour, ax=ax)
cbar.set_label('Z 值', fontsize=12)
# 添加标题和标签
ax.set_title('3D 等高线图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
5.6 3D条形图 (3D Bar Plot)
python
复制代码
#!/usr/bin/env python3
"""
3D 条形图示例
使用 bar3d() 函数创建三维立体条形
"""
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
z = np.zeros(5)
dx = dy = 0.5
dz = [1, 2, 3, 4, 5]
# 创建图形和 3D 坐标轴
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# 绘制 3D 条形
ax.bar3d(x, y, z, dx, dy, dz, color='skyblue', alpha=0.8)
# 添加标题和标签
ax.set_title('3D 条形图示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
5.7 3D矢量场 (3D Quiver Plot)
python
复制代码
#!/usr/bin/env python3
"""
3D 矢量场示例
使用 quiver() 函数创建三维箭头场
"""
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-2, 2, 5)
y = np.linspace(-2, 2, 5)
z = np.linspace(-2, 2, 5)
X, Y, Z = np.meshgrid(x, y, z)
U = X
V = Y
W = Z
# 创建图形和 3D 坐标轴
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# 绘制 3D 矢量场
ax.quiver(X, Y, Z, U, V, W, length=0.3, color='blue')
# 添加标题和标签
ax.set_title('3D 矢量场示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
# 设置坐标轴范围
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.set_zlim(-2, 2)
# 显示图形
plt.tight_layout()
plt.show()
6. 极坐标和特殊坐标 (Polar and Special Coordinates)
6.1 极坐标图 (Polar Plot)
python
复制代码
#!/usr/bin/env python3
"""
极坐标图示例
使用 polar() 函数在极坐标系中绘图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
theta = np.linspace(0, 2 * np.pi, 100)
r = np.sin(3 * theta)
# 创建图形和极坐标轴
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='polar')
# 绘制极坐标图
ax.plot(theta, r, color='blue', linewidth=2, label='sin(3θ)')
# 添加标题和图例
ax.set_title('极坐标图示例', fontsize=16, pad=20)
ax.legend(fontsize=12)
# 显示图形
plt.tight_layout()
plt.show()
6.2 饼图 (Pie Plot)
python
复制代码
#!/usr/bin/env python3
"""
饼图示例
使用 pie() 函数创建扇形统计图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
labels = ['A', 'B', 'C', 'D', 'E']
sizes = [15, 30, 25, 10, 20]
colors = ['skyblue', 'lightgreen', 'lightpink', 'lightyellow', 'lightcoral']
explode = (0, 0.1, 0, 0, 0) # 突出显示第二个扇形
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 绘制饼图
wedges, texts, autotexts = ax.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=90)
# 设置文本样式
for text in texts:
text.set_fontsize(12)
for autotext in autotexts:
autotext.set_fontsize(10)
autotext.set_color('white')
# 确保饼图是圆形
ax.axis('equal')
# 添加标题
ax.set_title('饼图示例', fontsize=16)
# 显示图形
plt.tight_layout()
plt.show()
6.3 雷达图 (Radar Plot)
python
复制代码
#!/usr/bin/env python3
"""
雷达图示例
使用极坐标 plot() 函数创建多变量雷达/蜘蛛图
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
categories = ['A', 'B', 'C', 'D', 'E', 'F']
N = len(categories)
# 数据点
values1 = [80, 65, 75, 90, 70, 85]
values2 = [60, 80, 70, 65, 90, 75]
# 计算角度
angles = np.linspace(0, 2 * np.pi, N, endpoint=False).tolist()
angles += angles[:1] # 闭合
# 闭合数据
values1 += values1[:1]
values2 += values2[:1]
# 创建图形和极坐标轴
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='polar')
# 绘制雷达图
ax.plot(angles, values1, color='blue', linewidth=2, label='数据集1', marker='o')
ax.plot(angles, values2, color='red', linewidth=2, label='数据集2', marker='s')
# 填充区域
ax.fill(angles, values1, color='blue', alpha=0.2)
ax.fill(angles, values2, color='red', alpha=0.2)
# 设置刻度标签
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories)
# 设置径向范围
ax.set_ylim(0, 100)
# 添加标题和图例
ax.set_title('雷达图示例', fontsize=16, pad=20)
ax.legend(fontsize=12, loc='upper right')
# 显示图形
plt.tight_layout()
plt.show()
7. 其他特殊图形 (Other Special Plots)
7.1 注释和箭头 (Annotate and Arrow)
python
复制代码
#!/usr/bin/env python3
"""
注释和箭头示例
使用 annotate() 函数添加注释和箭头
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制折线
ax.plot(x, y, color='blue', linewidth=2)
# 添加注释和箭头
ax.annotate('局部最大值', xy=(np.pi/2, 1), xytext=(np.pi/2 + 1, 1.2),
arrowprops=dict(facecolor='red', shrink=0.05))
ax.annotate('局部最小值', xy=(3*np.pi/2, -1), xytext=(3*np.pi/2 + 1, -1.2),
arrowprops=dict(facecolor='green', shrink=0.05))
# 添加标题和标签
ax.set_title('注释和箭头示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
# 显示图形
plt.tight_layout()
plt.show()
7.2 表格 (Table)
python
复制代码
#!/usr/bin/env python3
"""
表格示例
使用 table() 函数在图中添加表格
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
data = [
['A', 10, 20],
['B', 15, 25],
['C', 12, 18],
['D', 8, 22]
]
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 隐藏坐标轴
ax.axis('off')
# 添加表格
table = ax.table(cellText=data, colLabels=['类别', '值1', '值2'],
cellLoc='center', loc='center')
# 设置表格样式
table.auto_set_font_size(False)
table.set_fontsize(12)
table.scale(1, 1.5)
# 添加标题
ax.set_title('表格示例', fontsize=16)
# 显示图形
plt.tight_layout()
plt.show()
7.3 颜色条 (Colorbar)
python
复制代码
#!/usr/bin/env python3
"""
颜色条示例
使用 colorbar() 函数显示颜色映射刻度
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 8))
# 绘制热力图
im = ax.imshow(Z, cmap='viridis', extent=[-5, 5, -5, 5], origin='lower')
# 添加颜色条
cbar = plt.colorbar(im, ax=ax, orientation='vertical', shrink=0.8)
cbar.set_label('Z 值', fontsize=12)
cbar.set_ticks([-1, -0.5, 0, 0.5, 1])
cbar.set_ticklabels(['-1.0', '-0.5', '0.0', '0.5', '1.0'])
# 添加标题和标签
ax.set_title('颜色条示例', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
# 显示图形
plt.tight_layout()
plt.show()
7.4 子图布局 (Subplots)
python
复制代码
#!/usr/bin/env python3
"""
子图布局示例
使用 subplots() 函数创建复杂多子图排列
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(-x) * np.sin(x)
# 创建图形和子图
fig, axs = plt.subplots(2, 2, figsize=(12, 10))
# 绘制第一个子图
axs[0, 0].plot(x, y1, color='blue')
axs[0, 0].set_title('sin(x)', fontsize=14)
axs[0, 0].grid(True, linestyle='--', alpha=0.7)
# 绘制第二个子图
axs[0, 1].plot(x, y2, color='red')
axs[0, 1].set_title('cos(x)', fontsize=14)
axs[0, 1].grid(True, linestyle='--', alpha=0.7)
# 绘制第三个子图
axs[1, 0].plot(x, y3, color='green')
axs[1, 0].set_title('tan(x)', fontsize=14)
axs[1, 0].set_ylim(-10, 10)
axs[1, 0].grid(True, linestyle='--', alpha=0.7)
# 绘制第四个子图
axs[1, 1].plot(x, y4, color='purple')
axs[1, 1].set_title('exp(-x) * sin(x)', fontsize=14)
axs[1, 1].grid(True, linestyle='--', alpha=0.7)
# 添加总标题
fig.suptitle('子图布局示例', fontsize=16)
# 调整子图间距
plt.tight_layout()
# 显示图形
plt.show()
7.5 子图马赛克布局 (Subplot Mosaic)
python
复制代码
#!/usr/bin/env python3
"""
子图马赛克布局示例
使用 subplot_mosaic() 函数创建更灵活的子图排列
"""
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 字体以支持中文
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'KaiTi', 'SimSun-ExtG', 'DejaVu Sans', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(2*x)
y4 = np.cos(2*x)
# 创建图形和马赛克子图
fig, axs = plt.subplot_mosaic([['A', 'A', 'B'], ['C', 'D', 'D']], figsize=(12, 10))
# 绘制第一个子图
axs['A'].plot(x, y1, color='blue', label='sin(x)')
axs['A'].plot(x, y2, color='red', label='cos(x)')
axs['A'].set_title('sin(x) 和 cos(x)', fontsize=14)
axs['A'].legend(fontsize=12)
axs['A'].grid(True, linestyle='--', alpha=0.7)
# 绘制第二个子图
axs['B'].plot(x, y3, color='green')
axs['B'].set_title('sin(2x)', fontsize=14)
axs['B'].grid(True, linestyle='--', alpha=0.7)
# 绘制第三个子图
axs['C'].plot(x, y4, color='purple')
axs['C'].set_title('cos(2x)', fontsize=14)
axs['C'].grid(True, linestyle='--', alpha=0.7)
# 绘制第四个子图
axs['D'].plot(x, y1 + y2, color='orange')
axs['D'].set_title('sin(x) + cos(x)', fontsize=14)
axs['D'].grid(True, linestyle='--', alpha=0.7)
# 添加总标题
fig.suptitle('子图马赛克布局示例', fontsize=16)
# 调整子图间距
plt.tight_layout()
# 显示图形
plt.show()