Python Matplotlib | 基础绘图、复杂函数图与三维图

注:本文为 "Matplotlib 绘图" 相关合辑。

图片清晰度受引文原图所限。

略作重排,未整理去重。

如有内容异常,请看原文。


Matplotlib------在一张图内绘制多条曲线

以理服人李师傅 原创于 2020-07-24 16:25:38 发布

效果图

绘制过程

Matplotlib 提供两类绘图实现方式,具体说明如下:

  • 面向对象模式(object-oriented(OO)-style):手动创建画布与坐标轴对象,调用对应对象的方法完成绘图操作。
  • Pyplot 函数模式(pyplot-style):依托 pyplot 模块自动生成并管理画布与坐标轴,通过模块内置函数完成绘图操作。

Matplotlib 官方文档与示例同时采用上述两种模式,两类模式的运行输出效果保持一致。实际开发中可任选其一使用,建议选定单一模式并统一沿用,不建议混合编写代码

交互式绘图场景(如 Jupyter 笔记本环境)可优先使用 pyplot-style;非交互式绘图场景,以及需要将代码封装为函数、脚本并在项目中复用的场景,可优先使用 OO-style。

两类绘图模式均具备各自适用场景与功能特点,可查阅官方教程完成学习与实践。

1. 导入依赖库

引入 matplotlib.pyplot 模块,该步骤为后续绘图代码运行的前置条件。

python 复制代码
import matplotlib.pyplot as plt

2. 创建空白画布与坐标轴

python 复制代码
fig, ax = plt.subplots()

函数 plt.subplots() 用于创建画布或一组子图,该函数的返回值包含 Figure 实例与 axes.Axes 实例。上述代码中,变量 fig 对应 Figure 对象,变量 ax 对应 axes.Axes 对象。

3. 基于坐标轴对象绘制单条曲线

python 复制代码
fig, ax = plt.subplots()  # 创建画布与坐标轴实例
x = np.linspace(0, 2, 100)  # 定义 x 轴取值区间
y1 = x
ax.plot(x, y1, label='linear')  # 绘制 $y_1 = x$ 曲线,并设置曲线标识为 linear

上述代码可完成函数 y 1 = x y_1 = x y1=x 的图像绘制,代码内设置的 label 参数仅完成标识定义,此阶段图例不会在图像中展示

补充说明:图例显示方法

代码中通过 label 参数定义曲线名称后,需额外调用 ax.legend() 方法,方可在图像中渲染出图例内容。仅配置 label 参数无法完成图例展示。

4. 在同一画布内绘制多条曲线

沿用相同方式,可在一组坐标轴中叠加绘制多条曲线,代码示例如下:

python 复制代码
fig, ax = plt.subplots()  # 创建画布与坐标轴实例
x = np.linspace(0, 2, 100)  # 定义 x 轴取值区间
y1 = x
ax.plot(x, y1, label='linear')  # 绘制 $y_1 = x$ 曲线,并设置曲线标识为 linear

y2 = x ** 2
ax.plot(x, y2, label='quadratic')  # 绘制 $y_2 = x^2$ 曲线,并设置曲线标识为 quadratic

y3 = x ** 3
ax.plot(x, y3, label='cubic')  # 绘制 $y_3 = x^3$ 曲线,并设置曲线标识为 cubic

5. 配置坐标轴、标题与图例并展示图像

完整代码包含坐标轴命名、图像标题设置、图例渲染与图像显示等操作,完整实现如下:

python 复制代码
fig, ax = plt.subplots()  # 创建画布与坐标轴实例
x = np.linspace(0, 2, 100)  # 定义 x 轴取值区间
y1 = x
ax.plot(x, y1, label='linear')  # 绘制 $y_1 = x$ 曲线,并设置曲线标识为 linear

y2 = x ** 2
ax.plot(x, y2, label='quadratic')  # 绘制 $y_2 = x^2$ 曲线,并设置曲线标识为 quadratic

y3 = x ** 3
ax.plot(x, y3, label='cubic')  # 绘制 $y_3 = x^3$ 曲线,并设置曲线标识为 cubic

ax.set_xlabel('x label')  # 设置 x 轴名称
ax.set_ylabel('y label')  # 设置 y 轴名称
ax.set_title('Simple Plot')  # 设置图像标题
ax.legend()  # 识别曲线标识并渲染图例

plt.show()  # 展示最终图像

借助上述实现方式,可在单张画布中完成多条自定义曲线的绘制。

常见问题

问题 1:变量未定义,figax 提示报错

现象

执行 fig, ax = plt.subplots() 代码时,程序提示变量不存在或相关方法无法调用。

原因

运行代码前未导入 matplotlib.pyplot 模块。

解决

在代码文件起始位置添加库导入语句:

python 复制代码
import matplotlib.pyplot as plt

问题 2:调用 plt.show() 出现报错,图像无法弹出展示

现象

代码执行无绘图报错,但执行 plt.show() 语句时程序异常终止,图像窗口无法弹出。

原因

代码片段缺失 plt.show() 语句,或运行环境图形渲染组件异常。

解决
  1. 检查代码末尾,确认已添加 plt.show() 语句,该语句为唤起图像窗口的必要指令;
  2. 若已添加语句仍报错,可检查当前运行环境的图形界面配置,或切换运行环境重新执行代码。

问题 3:已设置 label 参数,图像中无图例显示

现象

曲线绘制正常,但预设的曲线名称未在图像上呈现。

原因

仅通过 plot 方法配置 label 参数,未调用图例渲染方法。

解决

在绘图代码后补充 ax.legend() 语句,程序会自动读取各条曲线的 label 内容并生成图例。


Matplotlib------绘制复杂函数图与三维图

SongpingWang 2018-07-01 11:04:19

本文介绍基于 Python 环境下 Matplotlib 程序库实现二维、三维函数图像的绘制,涵盖正弦复合函数、Sigmoid 函数、正态分布曲线、空间螺旋线等典型图形,并提供完整可运行代码示例。

一、绘制二维函数图

1.1 绘制 f ( x ) = sin ⁡ 2 ( x − 2 ) e − x 2 \boldsymbol{f(x) = \sin^2(x-2) e^{-x^2}} f(x)=sin2(x−2)e−x2 函数图

代码示例 1
python 复制代码
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["font.sans-serif"] = ['SimHei']  # 配置中文字符正常显示
plt.rcParams['axes.unicode_minus'] = False    # 配置负号正常显示

x = np.linspace(-2.5, 2, 256, endpoint=True)  # 生成区间 [-2.5, 2] 内的横坐标序列
f = (np.sin(x - 2)) ** 2 * (np.e) ** (-x ** 2)  # 计算函数对应纵坐标

plt.plot(x, f, "g-", lw=2.5, label="$f(x)$")
plt.title("$f(x) = \sin^2(x-2)e^{-x^2}$ 函数图")
plt.legend()
plt.show()
代码示例 2(函数拆分实现)

将复合函数 sin ⁡ 2 ( x − 2 ) e − x 2 \sin^2(x-2) e^{-x^2} sin2(x−2)e−x2 拆解为基础函数分步计算,令 x 1 = x − 2 x_1 = x-2 x1=x−2、 x 2 = − x 2 x_2 = -x^2 x2=−x2。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']  # 配置中文字符正常显示
plt.rcParams['axes.unicode_minus'] = False    # 配置负号正常显示

x = np.linspace(0, 2, 300, endpoint=True)
x_1 = x - 2
S_1 = np.sin(x_1)
S_2 = S_1 ** 2

E_1 = -x ** 2
E_2 = np.exp(E_1)
f = S_2 * E_2

plt.figure(figsize=(8, 6))  # 设定画布尺寸
plt.plot(x, f, 'b-', lw=2.5, label="$f(x)=\sin^2(x-2)e^{-x^2}$")
plt.legend()  # 展示图例
plt.show()

1.2 绘制 Sigmoid 函数图: f ( x ) = 1 1 + e − x \boldsymbol{f(x) = \dfrac{1}{1+e^{-x}}} f(x)=1+e−x1

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']  # 配置中文字符正常显示
plt.rcParams['axes.unicode_minus'] = False    # 配置负号正常显示

x = np.linspace(-10, 10, 300, endpoint=True)
E_1 = -x
E_2 = np.exp(E_1)
f = 1 / (1 + E_2)

plt.figure(figsize=(8, 6))  # 设定画布尺寸
ax1 = plt.subplot(111)
plt.plot(x, f, 'b-', lw=2.5, label="$f(x)=\\frac{1}{1+e^{-x}}$")
plt.legend()  # 展示图例
ax1.grid(True)  # 显示网格线
plt.show()

1.3 绘制正态分布曲线

正态分布表达式:

f ( x ) = 1 2 π σ exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) f(x)=\frac{1}{\sqrt{2\pi}\sigma}\exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right) f(x)=2π σ1exp(−2σ2(x−μ)2)

式中 μ \mu μ 为均值, σ \sigma σ 为标准差。

python 复制代码
import math
import matplotlib.pyplot as plt
import numpy as np

def gd(x, m, s):
    """正态分布计算函数
    m: 均值 μ
    s: 标准差 σ
    """
    left = 1 / (math.sqrt(2 * math.pi) * s)
    right = math.exp(-math.pow(x - m, 2) / (2 * math.pow(s, 2)))
    return left * right

def showfigure():
    plt.figure(figsize=(8, 6))  # 设定画布尺寸
    x = np.arange(-4, 5, 0.1)    # 生成区间 [-4, 5] 内的横坐标序列
    y = []
    for i in x:
        y.append(gd(i, 0, 1))  # 取 μ=0,σ=1

    plt.plot(x, y)
    plt.xlim(-4.0, 5.0)
    plt.ylim(-0.2, 0.5)

    # 调整坐标轴样式
    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data', 0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data', 0))

    # 标注参数与函数表达式
    label_f1 = "$\mu=0,\ \sigma=1$"
    plt.text(2.5, 0.3, label_f1, fontsize=15, verticalalignment="top", horizontalalignment="left")
    label_f2 = r"$f(x)=\frac{1}{\sqrt{2\pi}\sigma}\exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)$"
    plt.text(1.5, 0.4, label_f2, fontsize=15, verticalalignment="top", horizontalalignment="left")
    plt.show()

def main():
    showfigure()

if __name__ == "__main__":
    main()

二、绘制三维图

2.1 绘制三维螺旋线

python 复制代码
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(1, 1, 1, projection='3d')

theta = np.linspace(-4 * np.pi, 4 * np.pi, 500)  # 旋转角取值范围
z = np.linspace(0, 2, 500)                       # Z 轴坐标序列
r = z
x = r * np.sin(theta)
y = r * np.cos(theta)

ax.plot(x, y, z, label='curve')
ax.legend()
plt.show()

2.2 绘制三维散点图

python 复制代码
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')

x = np.linspace(0, 5, 10)
y = np.linspace(0, 5, 10)
z1 = x
z2 = 2 * x
z3 = 3 * x

ax.scatter(x, y, z1, c='red', marker='o')
ax.scatter(x, y, z2, c='green', marker='^')
ax.scatter(x, y, z3, c='black', marker='*')
ax.legend()
plt.show()

2.3 绘制三维柱状图

python 复制代码
import random
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
mpl.rcParams['font.size'] = 10

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')

for z in [2011, 2012, 2013, 2014]:
    xs = range(1, 13)
    ys = 1000 * np.random.rand(12)
    color = plt.cm.Set2(random.choice(range(plt.cm.Set2.N)))
    ax.bar(xs, ys, zs=z, zdir='y', color=color, alpha=0.8)

ax.xaxis.set_major_locator(mpl.ticker.FixedLocator(xs))
ax.yaxis.set_major_locator(mpl.ticker.FixedLocator(ys))
ax.set_xlabel('月份')
ax.set_ylabel('年份')
ax.set_zlabel('销售额')
plt.show()

2.4 绘制三维鞍部曲面图

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm

n_angles = 1000
n_radii = 20

radii = np.linspace(0.125, 1.0, n_radii)
angles = np.linspace(0, 2 * np.pi, n_angles, endpoint=False)
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)

x = np.append(0, (radii * np.cos(angles)).flatten())
y = np.append(0, (radii * np.sin(angles)).flatten())
z = np.sin(-x * y)

fig = plt.figure(figsize=(10, 10))
ax = fig.gca(projection='3d')
ax.plot_trisurf(x, y, z, cmap=cm.jet, linewidth=0.2)
plt.show()

2.5 绘制三维曲面图: f ( x , y ) = x e − x 2 − y 2 \boldsymbol{f(x,y) = x e^{-x^2-y^2}} f(x,y)=xe−x2−y2

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
from matplotlib import cm

x, y = np.mgrid[-2:2:100j, -2:2:100j]
z = x * np.exp(-x ** 2 - y ** 2)

ax = plt.subplot(111, projection='3d')
ax.set_title('山区曲面图')
ax.plot_surface(x, y, z, rstride=2, cstride=1, cmap=cm.jet)

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

2.6 三维动态柱状图

基于 pyecharts 实现可交互三维动态柱状图:

python 复制代码
from pyecharts import Bar3D

bar3d = Bar3D("3D 柱状图示例", width=1200, height=600)

x_axis = [
    "12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a",
    "12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"
]
y_axis = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]

data = [
    [0, 0, 5], [0, 1, 1], [0, 2, 0], [0, 3, 0], [0, 4, 0], [0, 5, 0],
    [0, 6, 0], [0, 7, 0], [0, 8, 0], [0, 9, 0], [0, 10, 0], [0, 11, 2],
    [0, 12, 4], [0, 13, 1], [0, 14, 1], [0, 15, 3], [0, 16, 4], [0, 17, 6],
    [0, 18, 4], [0, 19, 4], [0, 20, 3], [0, 21, 3], [0, 22, 2], [0, 23, 5],
    [1, 0, 7], [1, 1, 0], [1, 2, 0], [1, 3, 0], [1, 4, 0], [1, 5, 0],
    [1, 6, 0], [1, 7, 0], [1, 8, 0], [1, 9, 0], [1, 10, 5], [1, 11, 2],
    [1, 12, 2], [1, 13, 6], [1, 14, 9], [1, 15, 11], [1, 16, 6], [1, 17, 7],
    [1, 18, 8], [1, 19, 12], [1, 20, 5], [1, 21, 5], [1, 22, 7], [1, 23, 2],
    [2, 0, 1], [2, 1, 1], [2, 2, 0], [2, 3, 0], [2, 4, 0], [2, 5, 0],
    [2, 6, 0], [2, 7, 0], [2, 8, 0], [2, 9, 0], [2, 10, 3], [2, 11, 2],
    [2, 12, 1], [2, 13, 9], [2, 14, 8], [2, 15, 10], [2, 16, 6], [2, 17, 5],
    [2, 18, 5], [2, 19, 5], [2, 20, 7], [2, 21, 4], [2, 22, 2], [2, 23, 4],
    [3, 0, 7], [3, 1, 3], [3, 2, 0], [3, 3, 0], [3, 4, 0], [3, 5, 0],
    [3, 6, 0], [3, 7, 0], [3, 8, 1], [3, 9, 0], [3, 10, 5], [3, 11, 4],
    [3, 12, 7], [3, 13, 14], [3, 14, 13], [3, 15, 12], [3, 16, 9], [3, 17, 5],
    [3, 18, 5], [3, 19, 10], [3, 20, 6], [3, 21, 4], [3, 22, 4], [3, 23, 1],
    [4, 0, 1], [4, 1, 3], [4, 2, 0], [4, 3, 0], [4, 4, 0], [4, 5, 1],
    [4, 6, 0], [4, 7, 0], [4, 8, 0], [4, 9, 2], [4, 10, 4], [4, 11, 4],
    [4, 12, 2], [4, 13, 4], [4, 14, 4], [4, 15, 14], [4, 16, 12], [4, 17, 1],
    [4, 18, 8], [4, 19, 5], [4, 20, 3], [4, 21, 7], [4, 22, 3], [4, 23, 0],
    [5, 0, 2], [5, 1, 1], [5, 2, 0], [5, 3, 3], [5, 4, 0], [5, 5, 0],
    [5, 6, 0], [5, 7, 0], [5, 8, 2], [5, 9, 0], [5, 10, 4], [5, 11, 1],
    [5, 12, 5], [5, 13, 10], [5, 14, 5], [5, 15, 7], [5, 16, 11], [5, 17, 6],
    [5, 18, 0], [5, 19, 5], [5, 20, 3], [5, 21, 4], [5, 22, 2], [5, 23, 0],
    [6, 0, 1], [6, 1, 0], [6, 2, 0], [6, 3, 0], [6, 4, 0], [6, 5, 0],
    [6, 6, 0], [6, 7, 0], [6, 8, 0], [6, 9, 0], [6, 10, 1], [6, 11, 0],
    [6, 12, 2], [6, 13, 1], [6, 14, 3], [6, 15, 4], [6, 16, 0], [6, 17, 0],
    [6, 18, 0], [6, 19, 0], [6, 20, 1], [6, 21, 2], [6, 22, 2], [6, 23, 6]
]

range_color = [
    '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf',
    '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026'
]

bar3d.add(
    "", x_axis, y_axis, [[d[1], d[0], d[2]] for d in data],
    is_visualmap=True, visual_range=[0, 20],
    visual_range_color=range_color,
    grid3d_width=200, grid3d_depth=80,
    grid3d_shading='lambert',
    is_grid3d_rotate=True,
    grid3d_rotate_speed=10
)
bar3d.render()

致谢

参考资料来源:

https://blog.csdn.net/sinat_36772813/article/details/77365296

https://blog.csdn.net/eddy_zheng/article/details/48713449

https://blog.csdn.net/dahunihao/article/details/77833877


Python Matplotlib库绘制曲线图 入门教程

北岛寒沫 2023-11-24 21:35:10 修改

本文讲解 Matplotlib 程序库的基础使用方式,包含库导入、折线图绘制、图像保存、坐标轴配置、图例设置、中文显示等常用操作。

1. 导入 Matplotlib 库

python 复制代码
import matplotlib.pyplot as plt

2. 基础绘图函数 plot

plot 为绘制曲线的基础函数,支持传入多组坐标序列与样式参数,同时绘制多条曲线。

样式参数由颜色、线型、标记点三类字符组合构成。

  • 常用颜色标识:b 蓝色、g 绿色、r 红色、y 黄色、k 黑色、w 白色
  • 常用线型标识:- 实线、-- 虚线、-. 点划线、: 点线、空字符代表无线条
  • 常用标记标识:. 点状、, 微小点、o 实心圆、v 倒三角
python 复制代码
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
plt.plot(x, y, "r:o")

3. 展示图像

调用 plt.show() 输出已绘制的图像。

python 复制代码
a = [1, 2, 3, 4, 5]
b = [5, 4, 3, 2, 1]
plt.plot(a, b)
plt.show()

4. 保存图像

调用 plt.savefig() 保存图像,可通过 dpi 参数设置图像分辨率。

python 复制代码
plt.savefig("NewPicture", dpi=600)

5. 划分子绘图区域

subplot 用于将画布划分为多个独立绘图区域,调用格式:plt.subplot(行数, 列数, 区域编号)

python 复制代码
plt.subplot(2, 2, 4)
a = [1, 2, 3, 4, 5]
b = [5, 4, 3, 2, 1]
plt.plot(a, b)

6. 设置坐标轴名称

xlabelylabel 分别用于配置横轴、纵轴的标注文本。

python 复制代码
plt.xlabel("x")
plt.ylabel("sin(x)")

7. 设置图像标题

title 用于配置整张图像的标题文本。

python 复制代码
plt.title("TestPicture")

8. 中文显示配置

方式一:全局字体配置

对全部绘图内容统一设置字体。

python 复制代码
import matplotlib
matplotlib.rcParams["font.family"] = "SimHei"

方式二:局部字体配置

仅对指定文本单独设置字体。

python 复制代码
plt.xlabel("中文的横坐标", fontproperties="SimHei")
plt.ylabel("中文的纵坐标", fontproperties="SimHei")

9. 图像指定位置添加文本

text 函数可在画布指定坐标位置添加自定义文本,调用格式:plt.text(横坐标, 纵坐标, 文本内容)

python 复制代码
plt.text(30, 30, "InsertText")

10. 限定坐标轴取值范围

axis 函数用于约束横轴与纵轴的显示区间,调用格式:plt.axis([横轴最小值, 横轴最大值, 纵轴最小值, 纵轴最大值])

python 复制代码
plt.axis([-2, 2, -1, 1])

11. 添加网格线

启用网格线可提升数据可读性。

python 复制代码
plt.grid(True)

12. 设置图例

图例用于区分同一张图像内的多条曲线,需先接收绘图返回对象,再完成配置。

python 复制代码
import numpy as np

x = np.arange(10)
y1 = x * x
y2 = x * 2

line1, = plt.plot(x, y1)
line2, = plt.plot(x, y2)
plt.legend([line1, line2], ["第一条线", "第二条线"], loc="upper right")

13. 全局默认参数配置

可通过 rcParams 统一设置绘图默认属性,示例为设置画布尺寸。

python 复制代码
plt.rcParams["figure.figsize"] = (5, 3)

14. 绘制散点图

函数语法

python 复制代码
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, **kwargs)

参数说明

  • x, y:数组类型,对应散点的横、纵坐标数据
  • s:数值或数组,控制散点尺寸
  • c:字符或数组,控制散点颜色
  • marker:字符,定义散点标记样式
  • cmap:颜色映射方案
  • norm:颜色归一化对象
  • vmin, vmax:限定颜色映射的数值区间
  • alpha:透明度,取值区间 0 , 1 0,1 0,1
  • linewidths:散点轮廓线宽度
  • edgecolors:散点轮廓线颜色

代码示例

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)

# 绘制散点图
plt.scatter(x, y, s=100, c=colors, alpha=0.5)

# 配置标题与坐标轴
plt.title('Scatter Plot')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')

plt.show()

Matplotlib 复变函数可视化代码

一、代码基础说明

本文基于 Python + Matplotlib 实现复变函数 y = i x y=ix y=ix、 y = 2 + i x y=2+ix y=2+ix 的三维图像绘制与复平面二维投影,新增曲线颜色映射功能;同时讲解手写编码提速写法、代码精简规则、通用绘图元素添加方法、颜色映射配置方式、替代可视化库、代码性能优化方案以及各类自动化实现途径,内容连贯且适配实际编码与运行场景。

完整代码功能分为三部分:第一、二个子图为三维坐标系图像,分别展示函数 y = i x y=ix y=ix 与 y = 2 + i x y=2+ix y=2+ix,曲线支持渐变颜色映射;第三个子图为二维复平面投影图,呈现两个函数的几何平移关系与投影曲线配色映射。代码包含坐标轴标签、标题、图例、网格线、特征点标注、辅助参考线、渐变色条等通用绘图元素,支持图像保存与窗口预览。

整体画布分为 1 行 3 列子图,左侧两张为 3D 渐变空间曲线,分别对应复变函数 y = i x y=ix y=ix、 y = 2 + i x y=2+ix y=2+ix;右侧为二维复平面渐变投影图像,所有图像附带文字标注、辅助参考线、平移箭头以及独立渐变色条。

二、通用绘图元素添加方法

2.1 坐标轴标签

用于标注坐标系含义,区分二维与三维绘图场景,所有标签支持普通字符与 LaTeX 数学公式,公式内容需包裹在 r'$...$' 内部。

  1. 二维坐标系 :调用 set_xlabel()set_ylabel() 分别设置横轴、纵轴文字,可搭配 fontsize 参数调整字体大小。
python 复制代码
ax.set_xlabel(r'Re(y)', fontsize=11)
ax.set_ylabel(r'Im(y)', fontsize=11)
  1. 三维坐标系 :在二维标签基础上,新增 set_zlabel() 设置 Z 轴标签,分别对应自变量、复数实部、复数虚部。
python 复制代码
ax.set_xlabel('x (Real Parameter)', fontsize=10)
ax.set_ylabel('Re(y)', fontsize=10)
ax.set_zlabel('Im(y)', fontsize=10)

2.2 标题

使用 set_title() 为单个子图配置专属标题,支持字号、字体粗细配置,兼容 LaTeX 数学表达式,适配学术绘图格式。

python 复制代码
ax.set_title(r'(a) 3D Graph of $y=ix$', fontsize=12, weight='bold')

2.3 图例

用于区分同一坐标系内多条曲线或图形,配置分为两个步骤:

  1. plot() 绘图函数中新增 label 参数,定义图例展示文本;
  2. 调用 legend() 渲染图例,通过 loc 参数自由指定图例摆放位置。
python 复制代码
# 绘图时定义图例名称
ax.plot(x, yr, yi, 'g-', lw=2.5, label=r'$y=ix$')
# 展示图例
ax.legend(loc='upper left')

2.4 网格线

调用 grid() 开启/关闭坐标系网格,传入 1 代表启用、0 代表关闭;alpha 参数用于控制网格透明度,防止网格遮挡曲线与标注内容,该元素多用于二维复平面视图。

python 复制代码
ax.grid(1, alpha=0.3)

2.5 特征点标注

由散点标记与文字说明两部分组成,主要用于标记坐标原点、特殊复数取值等关键点位。

  1. 散点标记 :使用 scatter() 绘制点状图形,c 设置点颜色,s 设置点尺寸,zorder 控制图层优先级,确保散点始终展示在曲线上方。
python 复制代码
ax.scatter([0], [0], [2], c='b', s=60, zorder=5)
  1. 文字说明 :使用 text() 在指定坐标位置添加注释文本,可自定义字号、字体颜色,支持嵌入 LaTeX 复数公式,如 2 i 2i 2i。
python 复制代码
ax.text(0.15,0.15,2.1,r'$2i$', fontsize=11, c='b')

2.6 辅助参考线

辅助参考线分为坐标轴基准线与自定义参考线两类,辅助使用者理解复变函数的空间分布与平移规律。

  1. 复平面基准线axhline() 绘制水平实轴,axvline() 绘制垂直虚轴,是二维复平面必备基础元素。
python 复制代码
ax.axhline(y=0, c='k', lw=0.5)
ax.axvline(x=0, c='k', lw=0.5)
  1. 自定义参考线 :使用plot() 绘制虚线、实线等辅助线条,多用于标识虚轴延伸方向、函数平移轨迹。
python 复制代码
ax.plot([0,0],[0,0],[-3,3], 'r--', lw=1.5, alpha=0.7, label='Imaginary Axis')

2.7 拓展通用绘图元素

除上述基础元素外,结合复变函数可视化的使用场景,还可添加以下常用绘图元素,丰富图表信息、提升可视化直观性。

2.7.1 箭头与矢量标注

借助annotate 绘制带箭头的标注,可用于表示函数变换方向、空间向量、点位迁移关系,支持自定义箭头样式、线条颜色与粗细。

python 复制代码
# 绘制平移矢量箭头
ax3.annotate('', xy=(2, 2.5), xytext=(0, 2.5),
            arrowprops=dict(arrowstyle='->', c='r', lw=2))
# 搭配文字说明
ax3.text(1, 2.7, 'Shift by 2', fontsize=10, c='r', ha='center')
2.7.2 颜色映射与色条

针对复杂复变函数(模值、辐角分布),使用渐变色区分函数不同取值区间,搭配 colorbar 生成色条,标注颜色与数值的对应关系;该功能广泛应用于二维热力图、三维曲面/曲线渐变着色场景。

python 复制代码
# 为曲面添加色彩映射
surf = ax.plot_surface(X, Y, Z, cmap='jet')
# 显示色条
fig.colorbar(surf, ax=ax)

功能说明:色条依附于对应子图,可自由调节尺寸,直观展示颜色对应的自变量或函数取值。

2.7.3 填充区域

二维视图使用 fill_between、三维视图使用fill_between3d,填充曲线与坐标轴、两条曲线之间的封闭区域,直观展示自变量取值区间、函数差值范围。

python 复制代码
# 二维区域填充
ax3.fill_between(t, 0, t, alpha=0.2, color='g')
2.7.4 刻度样式与刻度标签

自定义坐标轴刻度位置与刻度文字,替换默认纯数值刻度,适配数学绘图规范;支持设置字号、颜色、文字旋转角度,规避刻度文字重叠问题。

python 复制代码
# 自定义刻度与标签
ax.set_xticks([-3, 0, 3])
ax.set_xticklabels([r'$-3$', r'$0$', r'$3$'], fontsize=9)
2.7.5 画布总标题

使用 fig.suptitle() 为整张画布设置全局总标题,区别于单个子图标题,用于统一阐述整组图像的研究主题。

python 复制代码
fig.suptitle('Complex Function Visualization', fontsize=14, weight='bold')
2.7.6 图形边框与背景样式

调整坐标轴边框显隐状态、线条样式,修改画布与绘图区域背景颜色,区分不同功能区域,优化整体视觉层次。

python 复制代码
# 隐藏顶部坐标轴边框
ax.spines['top'].set_visible(False)
# 设置绘图区域背景色
ax.set_facecolor('#f8f8f8')
2.7.7 等高线

二维视图使用 contour、三维视图使用 contour3D 绘制等高线,连接函数取值相等的所有点位,辅助分析复变函数模值、辐角的变化规律。

python 复制代码
# 二维等高线绘制
ax3.contour(X, Y, Z, levels=10, colors='gray', linewidths=0.8)

三、颜色映射配置说明

原生 Matplotlib 的 plot 函数不支持单条曲线逐点渐变配色;本文依托 LineCollection 线段集合工具,搭配归一化工具,完成三维、二维复变曲线的颜色映射配置,同时挂载渐变色条标注数值对应关系。

3.1 依赖库导入

实现曲线渐变配色,需要额外导入线段集合与数值归一化专属模块:

python 复制代码
from matplotlib.collections import LineCollection
from matplotlib.colors import Normalize
  • LineCollection:将完整曲线拆解为若干短线段,独立为每一段线段分配颜色,以此实现整条曲线平滑渐变效果;
  • Normalize:统一全局配色的数值映射区间,保证画布内多张子图的色标范围完全一致。

3.2 全局配色参数

预设配色方案与数值归一化区间,支持自由切换色系,适配不同绘图场景:

python 复制代码
cmap = plt.cm.jet        # 可选 viridis / plasma / rainbow / coolwarm
norm = Normalize(vmin=t.min(), vmax=t.max())  # 绑定自变量 x 的取值范围

3.3 曲线配色实现逻辑

  1. 提取目标曲线的全部坐标点,拆分重组为连续的线段集合;
  2. 绑定预设配色方案与全局归一化规则;
  3. 指定颜色映射依据(本文以自变量 x x x 完成映射,也可替换为复数模值);
  4. 将配置完成的渐变曲线添加至对应坐标系,并挂载专属渐变色条。

3.4 配色拓展方案

  1. 更换配色色系 :直接修改 cmap 参数即可,学术正式绘图优先选用 viridisplasma 两类低色差色系;
  2. 更换映射依据 :将映射数值替换为复数模值 modulus = y r 2 + y i 2 \text{modulus} = \sqrt{yr^2 + yi^2} modulus=yr2+yi2 ,根据函数幅值完成着色;
  3. 曲面着色 :针对复变函数三维曲面,直接调用 plot_surfacecmap 参数,即可一键完成曲面整体渐变着色。

四、手动编码快捷实现方案

4.1 通用语法简写规则

Matplotlib 内置标准化参数简写形式,可减少代码字符输入量,简写规则适用于全部二维、三维绘图场景。

  1. 参数简写linewidth 简写为 lwcolor 简写为 cfontweight='bold' 简写为 weight='bold';布尔参数 TrueFalse 可分别简写为 10
  2. 坐标范围合并写法set_xlimset_ylimset_zlim 可合并为 set(xlim=取值范围, ylim=取值范围, zlim=取值范围),减少函数调用次数。
  3. 变量连续赋值:数据类型相同的多组变量,可在同一代码行完成赋值,精简整体代码行数。

4.2 分模块手写精简写法

4.2.1 库导入

整合基础运算库、可视化库、配色专属库与警告屏蔽语句;新版 Matplotlib 已内置三维绘图底层依赖,无需额外导入 Axes3D

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib.colors import Normalize
import warnings
warnings.filterwarnings("ignore")
4.2.2 全局数据与画布创建

仅定义一组自变量采样序列,全局所有子图复用,同时初始化配色与归一化参数,统一绘图标准。

python 复制代码
t = np.linspace(-3, 3, 200)
cmap = plt.cm.jet
norm = Normalize(vmin=t.min(), vmax=t.max())
fig = plt.figure(figsize=(16,6))
4.2.3 子图创建

采用简写格式规划子图布局,fig.add_subplot(131) 代表 1 × 3 1 \times 3 1×3 布局下的第 1 个子图;三维图像需额外补充projection='3d' 参数。

python 复制代码
ax1 = fig.add_subplot(131, projection='3d')
ax2 = fig.add_subplot(132, projection='3d')
ax3 = fig.add_subplot(133)
4.2.4 数据赋值与曲线绘制

结合变量连续赋值规则简化复数数据定义,渐变曲线统一套用线段集合模板绘制,降低编码冗余度。

三维图像数据赋值示例:

python 复制代码
# 函数 y=ix 对应数据
x, yr, yi = t, np.zeros_like(t), t
# 函数 y=2+ix 对应数据
x, yr, yi = t, np.full_like(t,2), t
4.2.5 标注元素配置

散点、文字标注可固化为固定参数模板,完成第一组标注编写后,仅修改坐标、颜色、文本内容即可直接复用。

散点绘制模板:

python 复制代码
ax.scatter([坐标值 ], c=' 颜色标识 ', s=尺寸数值, zorder=层级数值)

文字标注模板:

python 复制代码
ax.text(坐标值, 展示文本, fontsize=字号, c=' 颜色标识 ')
4.2.6 基准线、坐标范围与图像输出

二维复平面必须添加横纵基准线并开启等比例坐标轴;坐标范围统一使用合并简写写法,图像输出语句固定不变。

python 复制代码
# 基准线与等比例配置
ax.axhline(y=0, c='k', lw=0.5)
ax.axvline(x=0, c='k', lw=0.5)
ax.set_aspect('equal')

# 图像输出配置
plt.tight_layout()
plt.savefig(' 图片名称 ', dpi=分辨率, bbox_inches='tight')
plt.show()
print("Image saved successfully!")

4.3 完整精简代码示例(含颜色映射)

整合简写规则与颜色映射功能,代码可直接运行,完整保留全部绘图元素、渐变曲线与独立渐变色条:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib.colors import Normalize
import warnings
warnings.filterwarnings("ignore")

# 全局参数与配色初始化
t = np.linspace(-3, 3, 200)
cmap = plt.cm.jet        
norm = Normalize(vmin=t.min(), vmax=t.max())
fig = plt.figure(figsize=(16, 6))

# ====================== 子图1 3D: y = ix 渐变曲线 ======================
ax1 = fig.add_subplot(131, projection='3d')
x1, yr1, yi1 = t, np.zeros_like(t), t

# 构造线段集合,实现渐变配色
points1 = np.array([x1, yr1, yi1]).T.reshape(-1, 1, 3)
segments1 = np.concatenate([points1[:-1], points1[1:]], axis=1)
lc1 = LineCollection(segments1, cmap=cmap, norm=norm, lw=2.5)
lc1.set_array(t)
ax1.add_collection3d(lc1)

# 辅助线与标注
ax1.plot([0,0],[0,0],[-3,3], 'r--', lw=1.5, alpha=0.7, label='Imaginary Axis')
ax1.scatter([0],[0],[0], c='k', s=50, zorder=5)
ax1.text(0.15,0.15,0.15,'O', fontsize=12, weight='bold')
ax1.scatter([0],[0],[2], c='b', s=60, zorder=5)
ax1.text(0.15,0.15,2.1,r'$2i$', fontsize=11, c='b')

# 坐标轴配置
ax1.set_xlabel('x (Real Parameter)', fontsize=10)
ax1.set_ylabel('Re(y)', fontsize=10)
ax1.set_zlabel('Im(y)', fontsize=10)
ax1.set_title(r'(a) 3D $y=ix$ | Color mapped by $x$', fontsize=12, weight='bold')
ax1.legend(loc='upper left')
ax1.set(xlim=(-3,3), ylim=(-3,3), zlim=(-3,3))
fig.colorbar(lc1, ax=ax1, shrink=0.6, label=r'Parameter $x$')

# ====================== 子图2 3D: y = 2+ix 渐变曲线 ======================
ax2 = fig.add_subplot(132, projection='3d')
x2, yr2, yi2 = t, np.full_like(t, 2), t

points2 = np.array([x2, yr2, yi2]).T.reshape(-1, 1, 3)
segments2 = np.concatenate([points2[:-1], points2[1:]], axis=1)
lc2 = LineCollection(segments2, cmap=cmap, norm=norm, lw=2.5)
lc2.set_array(t)
ax2.add_collection3d(lc2)

# 辅助线与标注
ax2.plot([0,0],[2,2],[-3,3], 'r--', lw=1.5, alpha=0.7, label='Direction of Imag. Axis')
ax2.scatter([0],[0],[0], c='k', s=50, zorder=5)
ax2.text(0.15,0.15,0.15,'O', fontsize=12, weight='bold')
ax2.scatter([0],[2],[0], c='orange', s=60, zorder=5)
ax2.text(0.15,2.1,0.15,r'$2$', fontsize=11, c='orange')
ax2.scatter([0],[2],[2], c='purple', s=60, zorder=5)
ax2.text(0.15,2.1,2.1,r'$2+2i$', fontsize=11, c='purple')

# 坐标轴配置
ax2.set_xlabel('x (Real Parameter)', fontsize=10)
ax2.set_ylabel('Re(y)', fontsize=10)
ax2.set_zlabel('Im(y)', fontsize=10)
ax2.set_title(r'(b) 3D $y=2+ix$ | Color mapped by $x$', fontsize=12, weight='bold')
ax2.legend(loc='upper left')
ax2.set(xlim=(-3,3), ylim=(-1,4), zlim=(-3,3))
fig.colorbar(lc2, ax=ax2, shrink=0.6, label=r'Parameter $x$')

# ====================== 子图3 2D复平面渐变投影 ======================
ax3 = fig.add_subplot(133)
proj1_x, proj1_y = np.zeros_like(t), t
proj2_x, proj2_y = np.full_like(t, 2), t

# 二维渐变曲线
seg_2d_1 = np.stack([proj1_x, proj1_y], axis=1)
lc_2d_1 = LineCollection([seg_2d_1], cmap=cmap, norm=norm, lw=2.5)
lc_2d_1.set_array(t)
ax3.add_collection(lc_2d_1)

seg_2d_2 = np.stack([proj2_x, proj2_y], axis=1)
lc_2d_2 = LineCollection([seg_2d_2], cmap=cmap, norm=norm, lw=2.5)
lc_2d_2.set_array(t)
ax3.add_collection(lc_2d_2)

# 标注与箭头
ax3.scatter([0],[0], c='k', s=50, zorder=5)
ax3.text(0.15,0.15,'O', fontsize=11, weight='bold')
ax3.scatter([0],[2], c='g', s=50, zorder=5)
ax3.text(0.15,2.15,r'$2i$', fontsize=10, c='g')
ax3.scatter([2],[0], c='orange', s=50, zorder=5)
ax3.text(2.15,0.15,r'$2$', fontsize=10, c='orange')
ax3.scatter([2],[2], c='purple', s=50, zorder=5)
ax3.text(0.15,2.15,r'$2+2i$', fontsize=10, c='purple')
ax3.annotate('', xy=(2,2.5), xytext=(0,2.5), arrowprops=dict(arrowstyle='->', c='r', lw=2))
ax3.text(1,2.7,'Shift by 2', fontsize=10, c='r', ha='center')

# 坐标轴配置
ax3.set_xlabel(r'Re(y)', fontsize=11)
ax3.set_ylabel(r'Im(y)', fontsize=11)
ax3.set_title(r'(c) Complex Plane Projection | Color Mapping', fontsize=12, weight='bold')
ax3.grid(1, alpha=0.3)
ax3.axhline(y=0, c='k', lw=0.5)
ax3.axvline(x=0, c='k', lw=0.5)
ax3.set(xlim=(-1,4), ylim=(-3,3))
ax3.set_aspect('equal')
fig.colorbar(lc_2d_1, ax=ax3, shrink=0.8, label=r'Parameter $x$')

# 图像导出
plt.tight_layout()
plt.savefig('complex_func_colormap.png', dpi=150, bbox_inches='tight')
plt.show()
print("Image saved successfully!")

4.4 编辑器辅助提速方式

  1. 代码片段与模板:VS Code、PyCharm 等主流编辑器支持自定义代码片段,可将绘图基础框架、配色初始化语句预设为模板,输入指定触发词即可快速生成基础代码框架。
  2. 代码复用修改:完成首个三维渐变子图代码编写后,直接复制代码块,仅修改坐标数据、标题、标注文字等差异化内容,减少重复编码。
  3. 代码自动补全:开启编辑器 Python 语法自动补全功能,依托联想功能快速调用绘图、配色相关函数与参数。

五、复变函数可视化替代库

除 Matplotlib 以外,Python 开源生态内有多款专业可视化库,均可实现复变函数二维平面、三维空间图像绘制,且原生兼容颜色映射功能;不同库适配场景、渲染特性各有差异。

5.1 Plotly

支持交互式二维、三维绘图,成品图像支持缩放、拖拽、悬浮查看点位坐标;原生内置渐变配色与色条组件,适配课程演示、网页嵌入场景,语法风格与 Matplotlib 相近,学习成本较低。

5.2 Mayavi

基于 VTK 图形引擎开发,专注三维科学数据可视化;三维曲面、空间渐变曲线的渲染质量与效率优于原生 Matplotlib,适合复杂三维复变函数、空间坐标变换场景,可承载大规模采样数据集。

5.3 SymPy

Python 专用符号计算库,内置轻量化绘图模块;可直接解析复数符号表达式,无需手动生成数值采样序列,快速绘制简易复变函数图像,自带基础配色功能,适配课堂教学、公式结果验证场景。

5.4 Seaborn

基于 Matplotlib 二次封装的可视化库,内置数十套专业化高级配色方案;可直接替换原生配色参数,简化颜色映射配置代码,多用于二维复变函数统计类可视化场景。

5.5 Bokeh

网页端交互式可视化,支持自定义渐变配色与色条;绘制图像可直接在浏览器中运行,适合嵌入网页、在线文档,短板为三维绘图相关功能较为匮乏。

六、代码性能优化方案

针对搭载颜色映射功能的复变函数可视化代码,可从数据处理、绘图配置、资源管理、运行环境四个维度,优化程序运行速度、内存占用与图形渲染效率。

6.1 数据层优化

  1. 合理控制采样点数 :常规教学演示场景选用 200 ∼ 500 200 \sim 500 200∼500个采样点即可,过高的采样数量会增加渐变线段集合的渲染压力;
  2. 复用数组对象:全局共享自变量采样数组与归一化参数,避免重复创建数据、重复初始化配色规则;
  3. 向量化运算替代循环:全程使用 NumPy 向量化运算求解复数实虚部、模值,摒弃低效 for 循环,提升颜色映射数据的计算效率;
  4. 数据裁剪与降采样:面对超大数据集,可裁剪无效取值区间或降低采样密度,减少线段集合数量,缓解渐变曲线渲染卡顿问题。

6.2 绘图配置优化

  1. 按需启用渲染元素:代码调试阶段可暂时关闭色条、文字标注、辅助参考线,正式出图前统一开启;
  2. 统一样式参数:统一所有子图的线条宽度、透明度、配色色系,避免为单个子图配置差异化参数,降低引擎计算负荷;
  3. 预先限定坐标范围:主动手动设置三轴坐标上下限,减少绘图引擎自动布局的计算耗时;
  4. 简化三维渲染参数:关闭三维视图抗锯齿、曲面细分等高耗性能配置,降低渐变 3D 曲线的渲染开销。

6.3 资源管理优化

  1. 及时释放画布资源 :批量绘图任务执行完毕后,调用 plt.close(fig) 销毁画布,释放占用内存;
  2. 切换非交互后端:仅需保存图片、无需弹窗预览时,切换为非交互渲染后端,跳过窗口渲染流程;
  3. 合并绘图区域:将所有目标曲线、子图集中放置在同一张画布内,减少画布频繁创建与销毁的资源损耗。
python 复制代码
# 释放画布资源
plt.close(fig)
# 切换非交互后端
import matplotlib
matplotlib.use('Agg')

6.4 运行与环境优化

  1. 选用脚本模式运行:大批量绘图任务建议通过终端执行脚本文件,资源占用远低于 IDE 调试运行模式;
  2. 屏蔽日志与警告输出:屏蔽第三方库无关运行警告,减少频繁 IO 输出带来的资源消耗;
  3. 分块渲染超大数据:海量采样数据曲线可拆分为多段分批渲染,规避单帧画面卡顿、程序闪退问题;
  4. 版本与依赖优化:优先使用最新稳定版 NumPy 与 Matplotlib,新版本优化了线段集合、颜色映射的底层渲染逻辑。

七、代码自动化实现途径

结合不同使用场景,可将自动化方案划分为基础自动化、进阶自动化、工程级自动化、零代码绘图四类,适配带颜色映射的复变函数绘图任务。

7.1 基础自动化方案

7.1.1 脚本一键运行

将完整绘图代码保存为 .py 后缀脚本文件,通过终端指令 python 文件名.py 或编辑器运行按钮,自动完成渐变曲线绘制、色条加载、图片保存、窗口预览全流程。

7.1.2 函数封装与参数调用

将绘图逻辑、配色配置封装为自定义函数,对外开放采样点数、函数偏移量、配色方案等可调参数,无需修改主体代码,即可生成不同参数对应的可视化效果图。

7.2 进阶自动化方案

7.2.1 AI 代码生成

以自然语言描述绘图需求,包含子图布局、渐变配色、色条、文字标注等细节,AI 工具可直接生成适配 Matplotlib 规范、自带颜色映射的完整可运行代码。

7.2.2 可视化工具生成代码

使用 Plotly Chart Studio 等在线可视化平台,通过可视化拖拽方式配置曲线样式、渐变配色,平台可自动导出可复用的 Python 源码。

7.2.3 Jupyter 交互式自动化

搭配 ipywidgets 交互组件库制作调节滑块,动态调整函数偏移量、配色方案、采样点数,实时刷新渐变图像,适合参数调试与课堂演示。

7.3 工程级自动化方案

7.3.1 循环批量生成图像

基于封装后的自定义绘图函数,结合循环语句遍历偏移量、配色参数,批量产出多组差异化复变函数渐变效果图。

7.3.2 系统定时任务

依托 Windows 任务计划程序、Linux / Mac Crontab 定时指令,设定固定时间自动运行绘图脚本,自动生成并保存配图。

7.3.3 跨程序调用与流水线集成

将封装后的绘图函数嵌入其他工程项目、Shell 脚本,亦可接入 CI / CD 流水线,代码提交后自动触发绘图、配图更新流程。

7.4 零代码绘图方案

使用 Tableau、FineBI 等商用在线可视化平台,上传预处理后的复数数据集,通过界面点选操作配置渐变配色、色条、坐标轴,零代码完成复变函数可视化。

八、方案选用

结合使用场景、编码门槛、运行性能三大维度,各类实现与优化方案适配规则如下:

  1. 单次运行、日常代码调试:脚本一键运行 + 基础代码简写;
  2. 频繁调整参数、批量产出对比图:函数封装 + 循环批量绘图,统一全局配色参数;
  3. 无编码基础、快速制作配图:AI 代码生成、在线零代码可视化平台;
  4. 交互式调参、实时预览渐变效果:Jupyter 编辑器 + 交互式滑块组件;
  5. 团队标准化批量产出:系统定时任务、CI / CD 自动化流水线;
  6. 追求高品质渐变渲染效果:优先选用 Plotly、Mayavi 第三方可视化替代库;
  7. 大批量高频次绘图任务:启用数据复用、非交互后端、画布资源释放等全套性能优化手段;
  8. 丰富图表展示内容:按需叠加渐变颜色映射、渐变色条、文字标注、等高线、填充区域等绘图元素。

reference

相关推荐
恣艺4 天前
解决 PyCharm 2024.1+ matplotlib 图表显示异常:Plots 工具窗口空白 / tostring_rgb 报错
ide·pycharm·matplotlib
是上好佳佳佳呀5 天前
【数据分析|Day02】Matplotlib 数据可视化笔记
笔记·matplotlib
ice8130331816 天前
【Python】Matplotlib折线图绘制
开发语言·python·matplotlib
北暮城南8 天前
使用 Claude Code 高效实现图像边缘检测:多算法对比与工程实践
python·opencv·numpy·matplotlib·边缘检测·claude code
red2brick9 天前
【使用PyQt6与Matplotlib编写交互式生成一元二次函数图形程序】
matplotlib
DogDaoDao12 天前
OpenCV 踩坑全指南
图像处理·人工智能·python·opencv·计算机视觉·matplotlib·rgb
电魂泡哥13 天前
Matplotlib.pyplot 完全入门指南
信息可视化·matplotlib
十年之少13 天前
matplotlib 与 PyQt5 结合使用——PyQt5
matplotlib·pyqt5
河阿里14 天前
Python数据可视化:Matplotlib从入门到精通
python·信息可视化·matplotlib