matplotlib_tutorial

Matplotlib 完整教程

目录

  1. 成对数据 (Pairwise Data)

  2. 统计分布 (Statistical Distributions)

  3. 网格数据 (Gridded Data)

  4. 非规则网格数据 (Irregularly Gridded Data)

  5. 3D和体数据 (3D and Volumetric Data)

  6. 极坐标和特殊坐标 (Polar and Special Coordinates)

  7. 其他特殊图形 (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()
相关推荐
柳杉14 小时前
从动漫水面到赛博飞船:这位开发者的Three.js作品太惊艳了
前端·javascript·数据可视化
CC数分16 小时前
电商领域备考CDA数据分析师经验分享
经验分享·数据分析
Triv202521 小时前
太阳能船远程信息处理:CAN数据记录 + Grafana仪表板实战案例
grafana·数据可视化·influxdb·嵌入式系统·can总线·数据采集与监控·智能船舶
V1ncent Chen21 小时前
SQL大师之路 14 子查询
数据库·sql·mysql·数据分析
byzh_rc1 天前
[AI工具从入门到入土] matplotlib
人工智能·matplotlib
V1ncent Chen1 天前
SQL大师之路 15 条件分支
数据库·sql·mysql·数据分析
I love studying!!!1 天前
python项目:生成数据
信息可视化·数据挖掘·数据分析
十三画者1 天前
【文献分享】利用 Evo 2 在生命的所有领域进行基因组建模与设计
数据挖掘·数据分析·lstm
十三画者1 天前
【文献分享】OSDR基于空间截面的时态组织动态分析
数据挖掘·数据分析·lstm