绘图函数

TianYuan 提供了强大的图形绘制功能,支持2D和3D绘图、散点图、样式定制等。图形系统基于事件驱动架构,所有绘图命令生成事件,由外部图形引擎(如 Python Matplotlib)渲染。

基本绘图函数

plot - 二维线图

语法 说明
plot(y) 绘制向量 y,横坐标为索引
plot(x, y) 绘制 x-y 曲线
plot(x, y, linespec) 指定线型、颜色和标记

参数说明

  • x: 横坐标向量
  • y: 纵坐标向量
  • linespec: 线型字符串,如 'r-', 'b--o'

示例

# 基本曲线绘制
x = linspace(0, 2*pi, 100)
y = sin(x)
plot(x, y)
xlabel('x')
ylabel('sin(x)')
title('正弦函数')
grid('on')

# 绘制多条曲线
x = 0:0.1:2*pi
y1 = sin(x)
y2 = cos(x)
plot(x, y1)
hold('on')
plot(x, y2)
legend(['sin(x)', 'cos(x)'])

# 使用线型和颜色
plot(x, y1, 'r-')      # 红色实线
plot(x, y2, 'b--')     # 蓝色虚线

# 带标记的曲线
x = 0:10
y = x.^2
plot(x, y, 'ro-')      # 红色圆圈标记,实线连接

plot3 - 三维线图

语法 说明
plot3(x, y, z) 绘制三维空间曲线
plot3(x, y, z, linespec) 指定线型的三维曲线

参数说明

  • x, y, z: 三维坐标向量
  • linespec: 线型字符串

示例

# 三维螺旋线
t = linspace(0, 10*pi, 500)
x = sin(t)
y = cos(t)
z = t
plot3(x, y, z)
xlabel('X')
ylabel('Y')
zlabel('Z')
title('三维螺旋线')
grid('on')

# 三维参数曲线
t = 0:0.01:2*pi
x = cos(t)
y = sin(t)
z = t / (2*pi)
plot3(x, y, z, 'r-')
title('圆锥螺旋线')

# 三维空间多条曲线
t = linspace(0, 4*pi, 200)
x1 = sin(t)
y1 = cos(t)
z1 = t
plot3(x1, y1, z1, 'r-')
hold('on')
x2 = sin(t) * 0.5
y2 = cos(t) * 0.5
z2 = t
plot3(x2, y2, z2, 'b-')
legend(['外螺旋', '内螺旋'])

scatter - 散点图

语法 说明
scatter(x, y) 绘制散点图
scatter(x, y, s) 指定点的大小
scatter(x, y, s, c) 指定点的大小和颜色

参数说明

  • x, y: 数据点坐标
  • s: 点的大小(标量或向量)
  • c: 颜色(向量,用于颜色映射)

示例

# 基本散点图
x = rand(50, 1) * 10
y = rand(50, 1) * 10
scatter(x, y)
xlabel('X')
ylabel('Y')
title('随机散点图')
grid('on')

# 不同大小的散点
x = 1:10
y = x.^2
sizes = x * 20        # 点的大小随 x 增大
scatter(x, y, sizes)
title('大小变化的散点图')

# 带颜色映射的散点图
n = 100
x = randn(n, 1)
y = randn(n, 1)
c = x.^2 + y.^2      # 颜色值(距离原点的平方)
scatter(x, y, 30, c)
title('彩色散点图')
grid('on')

# 分类数据散点图
group1_x = randn(30, 1)
group1_y = randn(30, 1)
group2_x = randn(30, 1) + 3
group2_y = randn(30, 1) + 3
scatter(group1_x, group1_y, 50, 'r')
hold('on')
scatter(group2_x, group2_y, 50, 'b')
legend(['组1', '组2'])
title('分类散点图')

图形窗口控制

figure - 创建图形窗口

语法 说明
figure(n) 创建或激活编号为 n 的图形窗口

示例

# 在不同窗口绘制多个图形
figure(1)
x = linspace(0, 2*pi, 100)
plot(x, sin(x))
title('图形窗口 1: sin(x)')

figure(2)
plot(x, cos(x))
title('图形窗口 2: cos(x)')

figure(3)
plot(x, tan(x))
ylim([-5, 5])
title('图形窗口 3: tan(x)')

# 返回窗口1继续绘图
figure(1)
hold('on')
plot(x, cos(x), 'r--')
legend(['sin(x)', 'cos(x)'])

hold - 保持图形

语法 说明
hold('on') 保持当前图形,后续绘图命令添加到当前图形
hold('off') 关闭保持模式,后续绘图命令清除当前图形

示例

# 在同一图形上绘制多条曲线
x = 0:0.1:10

plot(x, sin(x), 'r-')
hold('on')              # 开启保持模式
plot(x, cos(x), 'b-')
plot(x, sin(x).*cos(x), 'g-')
hold('off')             # 关闭保持模式

legend(['sin(x)', 'cos(x)', 'sin(x)cos(x)'])
title('多条曲线叠加')
grid('on')

# 逐步添加数据点
x = []
y = []
for i = 1:10
    x = [x, i]
    y = [y, rand(1, 1)]
    plot(x, y, 'o-')
    if i == 1
        hold('on')
    end
    pause(0.5)
end
hold('off')

grid - 网格线

语法 说明
grid('on') 显示网格线
grid('off') 隐藏网格线

示例

# 带网格的图形
x = linspace(0, 10, 100)
y = exp(-x/5) .* sin(x)
plot(x, y)
grid('on')
title('衰减振荡曲线(带网格)')

# 对比有无网格
figure(1)
plot(x, y)
grid('off')
title('无网格')

figure(2)
plot(x, y)
grid('on')
title('有网格')

drawnow - 立即刷新图形

语法 说明
drawnow() 强制刷新图形显示(用于动画和实时绘图)

示例

# 动画效果
x = linspace(0, 2*pi, 100)
for phase = 0:0.1:2*pi
    y = sin(x + phase)
    plot(x, y)
    ylim([-1.5, 1.5])
    title(['正弦波动画 - 相位: ', num2str(phase)])
    drawnow()           # 立即更新显示
    pause(0.05)
end

# 实时数据绘图
data = []
for i = 1:100
    new_val = sin(i/10) + randn(1, 1) * 0.1
    data = [data, new_val]
    plot(1:length(data), data, 'b-o')
    title(['实时数据 - 样本数: ', num2str(length(data))])
    drawnow()
    pause(0.1)
end

pause - 暂停执行

语法 说明
pause(n) 暂停 n 秒(浮点数)

示例

# 延时绘图
for i = 1:5
    plot(rand(10, 1))
    title(['图形 ', num2str(i)])
    pause(1)            # 暂停1秒
end

# 慢速动画
x = 0:0.1:10
for i = 1:length(x)
    plot(x(1:i), sin(x(1:i)), 'b-o')
    xlim([0, 10])
    ylim([-1.5, 1.5])
    grid('on')
    drawnow()
    pause(0.05)         # 每帧暂停0.05秒
end

gcf - 获取当前图形句柄

语法 说明
h = gcf() 返回当前图形窗口的句柄;若无图形则自动创建一个

示例

x = linspace(0, 2*pi, 100)
plot(x, sin(x))
title('正弦曲线')
# 使用 gcf() 将当前图形保存为 PNG
saveas(gcf(), 'sinwave.png', 'png')

gca - 获取当前坐标轴句柄

语法 说明
h = gca() 返回当前坐标轴句柄;若无坐标轴则返回 0

示例

plot([1 2 3], [1 4 9])
ax = gca()          # 获取当前坐标轴句柄
disp(ax)

subplot - 多子图布局

语法 说明
subplot(m, n, p) 将图形窗口划分为 m×n 网格,激活第 p 个子图(按行优先编号)

示例

x = linspace(0, 2*pi, 100)

subplot(2, 2, 1)
plot(x, sin(x))
title('sin(x)')

subplot(2, 2, 2)
plot(x, cos(x))
title('cos(x)')

subplot(2, 2, 3)
plot(x, sin(2*x))
title('sin(2x)')

subplot(2, 2, 4)
plot(x, cos(2*x))
title('cos(2x)')

close - 关闭图形窗口

语法 说明
close() 关闭当前图形窗口
close(n) 关闭编号为 n 的图形窗口

示例

figure(1)
plot([1 2 3], [1 4 9])

figure(2)
plot([1 2 3], [9 4 1])

close(1)    # 关闭图形窗口 1
close()     # 关闭当前图形窗口(即窗口 2)

saveas - 保存图形

语法 说明
saveas(h, filename) 将句柄为 h 的图形保存为文件,格式由扩展名推断
saveas(h, filename, fmt) 以指定格式保存,fmt 可为 'png''pdf''svg'

示例

x = linspace(0, 2*pi, 100)
plot(x, sin(x))
title('正弦曲线')
xlabel('x')
ylabel('sin(x)')
grid('on')

saveas(gcf(), 'sinwave.png', 'png')   # 保存为 PNG
saveas(gcf(), 'sinwave.pdf', 'pdf')   # 保存为 PDF

统计图表

bar / barh - 柱状图

语法 说明
bar(y) 绘制竖向柱状图,x 轴为自动编号
bar(x, y) 绘制竖向柱状图,指定 x 轴位置
barh(y) 绘制水平柱状图

示例

categories = [10, 25, 15, 30, 20]
bar(categories)
title('月销售量')
xlabel('月份')
ylabel('数量')
grid('on')

pie - 饼图

语法 说明
pie(x) 绘制饼图,x 为各扇区数据

示例

data = [30, 25, 20, 15, 10]
pie(data)
title('市场占比')

stem - 茎叶图

语法 说明
stem(y) 绘制茎叶图
stem(x, y) 绘制茎叶图,指定 x 轴

示例

n = 0:20
y = sin(n * pi / 10)
stem(n, y)
title('离散正弦信号')
xlabel('n')
ylabel('sin(nπ/10)')

stairs - 阶梯图

语法 说明
stairs(y) 绘制阶梯折线图
stairs(x, y) 绘制阶梯折线图,指定 x 轴

示例

t = 0:0.5:5
y = floor(sin(t) * 3)
stairs(t, y)
title('离散阶跃信号')
grid('on')

errorbar - 误差棒图

语法 说明
errorbar(x, y, e) 绘制带误差棒的折线图,e 为误差量(对称)

示例

x = 1:5
y = [2.1, 3.5, 2.8, 4.2, 3.9]
e = [0.3, 0.5, 0.4, 0.6, 0.2]
errorbar(x, y, e)
title('实验测量结果')
xlabel('组别')
ylabel('测量值')
grid('on')

特殊坐标图

semilogx / semilogy / loglog - 对数坐标图

语法 说明
semilogx(x, y) x 轴取对数坐标,y 轴线性
semilogy(x, y) y 轴取对数坐标,x 轴线性
loglog(x, y) x、y 轴均取对数坐标

示例

x = logspace(0, 3, 100)    # 10^0 到 10^3

subplot(1, 3, 1)
semilogx(x, x.^0.5)
title('semilogx')
grid('on')

subplot(1, 3, 2)
semilogy(x, x.^2)
title('semilogy')
grid('on')

subplot(1, 3, 3)
loglog(x, x.^1.5)
title('loglog')
grid('on')

polarplot - 极坐标图

语法 说明
polarplot(theta, r) 在极坐标系中绘图,theta 为角度(弧度),r 为半径
polarplot(theta, r, linespec) 指定线型,linespec 格式与 plot 相同,如 'r''b--''go'

示例

theta = linspace(0, 2*pi, 300)

# 玫瑰线(蓝色实线)
r = cos(3 * theta)
polarplot(theta, abs(r), 'b')
title('三瓣玫瑰线')

# 蜗牛线(红色虚线)
rho = 1 + 0.5 * cos(5 * theta)
polarplot(theta, rho, 'r--')
title('蜗牛线')

三维曲面图

meshgrid - 生成网格矩阵

语法 说明
[X, Y] = meshgrid(x, y) 由向量 x、y 生成二维坐标网格矩阵
[X, Y] = meshgrid(x) 等价于 meshgrid(x, x)

surf - 三维曲面图

语法 说明
surf(X, Y, Z) 绘制有颜色填充的三维曲面

mesh - 三维网格图

语法 说明
mesh(X, Y, Z) 绘制无填充的三维网格曲面

示例

x = linspace(-3, 3, 50)
y = linspace(-3, 3, 50)
[X, Y] = meshgrid(x, y)
Z = sin(sqrt(X.^2 + Y.^2))

subplot(1, 2, 1)
surf(X, Y, Z)
title('surf: 曲面图')
xlabel('X')
ylabel('Y')
zlabel('Z')

subplot(1, 2, 2)
mesh(X, Y, Z)
title('mesh: 网格图')
xlabel('X')
ylabel('Y')
zlabel('Z')

轮廓图

contour / contourf - 等高线图

语法 说明
contour(X, Y, Z) 绘制等高线(轮廓线)
contour(X, Y, Z, n) 绘制 n 条等高线
contourf(X, Y, Z) 绘制填充颜色的等高线图

示例

x = linspace(-2, 2, 60)
y = linspace(-2, 2, 60)
[X, Y] = meshgrid(x, y)
Z = X .* exp(-X.^2 - Y.^2)

subplot(1, 2, 1)
contour(X, Y, Z, 15)
title('contour 等高线')
grid('on')

subplot(1, 2, 2)
contourf(X, Y, Z, 15)
title('contourf 填充等高线')

图像显示

imagesc - 矩阵图像显示

语法 说明
imagesc(C) 将矩阵 C 的值映射为颜色,显示为图像

colormap - 设置颜色映射

语法 说明
colormap(name) 设置颜色映射方案,支持 'jet''hot''gray''cool'

示例

# 可视化矩阵(如热力图)
n = 50
[X, Y] = meshgrid(linspace(-pi, pi, n))
Z = sin(X) .* cos(Y)

imagesc(Z)
colormap('jet')
title('sin(x)·cos(y) 热力图')

文字标注

text - 在图形中添加文字

语法 说明
text(x, y, str) 在坐标 (x, y) 处添加文字标注

示例

x = linspace(0, 2*pi, 100)
plot(x, sin(x))
title('正弦曲线标注')
xlabel('x')
ylabel('sin(x)')

# 标注峰值
text(pi/2, 1.05, '最大值 (π/2, 1)')
# 标注零点
text(pi, 0.1, 'π')
text(2*pi, 0.1, '2π')

坐标轴标签和标题

函数 说明 示例
xlabel(text) 设置 X 轴标签 xlabel('时间 (秒)')
ylabel(text) 设置 Y 轴标签 ylabel('幅度')
zlabel(text) 设置 Z 轴标签(3D图) zlabel('高度 (m)')
title(text) 设置图形标题 title('正弦函数图像')

标签和标题示例

# 完整的二维图形标注
x = linspace(0, 10, 100)
y = exp(-x/3) .* sin(2*x)
plot(x, y, 'b-')
xlabel('时间 (秒)')
ylabel('振幅 (伏特)')
title('阻尼振荡信号')
grid('on')

# 三维图形标注
t = linspace(0, 10, 500)
x = sin(t)
y = cos(t)
z = t
plot3(x, y, z, 'r-')
xlabel('X 坐标')
ylabel('Y 坐标')
zlabel('Z 坐标')
title('三维螺旋线')
grid('on')

# 动态更新标题
for i = 1:10
    x = rand(20, 1)
    y = rand(20, 1)
    scatter(x, y)
    title(['散点图 - 迭代 ', num2str(i), '/10'])
    xlabel('X')
    ylabel('Y')
    pause(0.5)
end

坐标轴范围控制

函数 说明 示例
xlim([xmin, xmax]) 设置 X 轴显示范围 xlim([0, 10])
ylim([ymin, ymax]) 设置 Y 轴显示范围 ylim([-1, 1])
zlim([zmin, zmax]) 设置 Z 轴显示范围(3D) zlim([0, 5])

坐标轴范围示例

# 限制 Y 轴范围
x = linspace(0, 10, 100)
y = tan(x)
plot(x, y)
ylim([-5, 5])         # 限制 Y 轴,避免 tan 函数的极值影响
xlabel('x')
ylabel('tan(x)')
title('正切函数(限制 Y 轴范围)')
grid('on')

# 放大感兴趣区域
x = linspace(0, 100, 1000)
y = sin(x) ./ x
plot(x, y)
xlim([10, 30])        # 只显示 x 在 [10, 30] 的区域
ylim([-0.1, 0.1])
title('sin(x)/x 的局部放大')
grid('on')

# 三维图形范围控制
t = linspace(0, 20, 1000)
x = sin(t) .* t
y = cos(t) .* t
z = t
plot3(x, y, z)
xlim([-20, 20])
ylim([-20, 20])
zlim([0, 20])
xlabel('X')
ylabel('Y')
zlabel('Z')
title('圆锥螺旋(固定范围)')
grid('on')

# 动态调整范围
for i = 1:50
    x = 0:0.1:i
    y = sin(x)
    plot(x, y, 'b-')
    xlim([0, 50])       # 固定 X 轴范围
    ylim([-1.5, 1.5])   # 固定 Y 轴范围
    title(['动画帧 ', num2str(i)])
    drawnow()
    pause(0.05)
end

图例

legend - 添加图例

语法 说明
legend(labels) 添加图例,labels 为字符串向量

参数说明

  • labels: 字符串向量,每个元素对应一条曲线的标签

示例

# 基本图例
x = linspace(0, 2*pi, 100)
plot(x, sin(x), 'r-')
hold('on')
plot(x, cos(x), 'b--')
plot(x, sin(2*x), 'g-.')
hold('off')
legend(['sin(x)', 'cos(x)', 'sin(2x)'])
title('三角函数比较')
grid('on')

# 多组数据的图例
x = 1:10
y1 = x
y2 = x.^2
y3 = x.^3
plot(x, y1, 'ro-')
hold('on')
plot(x, y2, 'bs-')
plot(x, y3, 'g^-')
hold('off')
legend(['线性', '平方', '立方'])
xlabel('x')
ylabel('f(x)')
title('不同增长速度比较')
grid('on')

# 三维图形图例
t = linspace(0, 4*pi, 200)
x1 = sin(t)
y1 = cos(t)
z1 = t
x2 = 2 * sin(t)
y2 = 2 * cos(t)
z2 = t
plot3(x1, y1, z1, 'r-')
hold('on')
plot3(x2, y2, z2, 'b-')
hold('off')
legend(['小螺旋', '大螺旋'])
xlabel('X')
ylabel('Y')
zlabel('Z')
title('双螺旋结构')

主题样式

theme - 设置图形主题

语法 说明
theme('default') 默认主题(浅色背景)
theme('dark') 暗色主题
theme('classic') 经典主题

示例

# 使用暗色主题
theme('dark')
x = linspace(0, 2*pi, 100)
y = sin(x)
plot(x, y, 'c-')
xlabel('x')
ylabel('sin(x)')
title('暗色主题示例')
grid('on')

# 对比不同主题
figure(1)
theme('default')
plot(x, sin(x))
title('默认主题')

figure(2)
theme('dark')
plot(x, sin(x))
title('暗色主题')

figure(3)
theme('classic')
plot(x, sin(x))
title('经典主题')

# 恢复默认主题
theme('default')

隐函数绘图

fimplicit - 绘制隐函数

语法 说明
fimplicit(f) 绘制满足 f(x,y) = 0 的曲线
fimplicit(f, range) 在指定范围 [xmin xmax ymin ymax] 内绘制

参数说明

  • f: 匿名函数或函数句柄,接受两个参数 (x, y)
  • range: 可选的4元素向量 [xmin, xmax, ymin, ymax]

示例

# 圆的隐函数
# x^2 + y^2 = 1
fimplicit(@(x, y) x^2 + y^2 - 1)
title('单位圆')
grid('on')

# 椭圆
# x^2/4 + y^2/9 = 1
fimplicit(@(x, y) x^2/4 + y^2/9 - 1, [-3, 3, -4, 4])
title('椭圆')
xlabel('x')
ylabel('y')
grid('on')

# 双曲线
# x^2 - y^2 = 1
fimplicit(@(x, y) x^2 - y^2 - 1, [-5, 5, -5, 5])
title('双曲线')
grid('on')

# 心形线
# (x^2 + y^2 - 1)^3 = x^2 * y^3
fimplicit(@(x, y) (x^2 + y^2 - 1)^3 - x^2 * y^3, [-2, 2, -2, 2])
title('心形线')
grid('on')

# 柠檬线
# (x^2 + y^2)^2 = a^2 * (x^2 - y^2)
a = 2
fimplicit(@(x, y) (x^2 + y^2)^2 - a^2 * (x^2 - y^2), [-3, 3, -3, 3])
title('柠檬线')
grid('on')

综合应用示例

示例1:多子图布局(模拟)

# 虽然 TianYuan 不直接支持子图,但可以使用多个窗口
x = linspace(0, 2*pi, 100)

figure(1)
plot(x, sin(x))
title('sin(x)')
xlabel('x')
grid('on')

figure(2)
plot(x, cos(x))
title('cos(x)')
xlabel('x')
grid('on')

figure(3)
plot(x, tan(x))
ylim([-5, 5])
title('tan(x)')
xlabel('x')
grid('on')

figure(4)
plot(x, sin(x) + cos(x))
title('sin(x) + cos(x)')
xlabel('x')
grid('on')

示例2:参数曲面(李萨如图形)

# 李萨如曲线
a = 3
b = 4
delta = pi/4
t = linspace(0, 2*pi, 1000)
x = sin(a * t + delta)
y = sin(b * t)
plot(x, y, 'b-')
title(['李萨如曲线 a=', num2str(a), ' b=', num2str(b)])
xlabel('x')
ylabel('y')
grid('on')

示例3:相图

# 简谐振子的相图(位置-速度)
# 模拟数据
t = linspace(0, 10, 1000)
x = cos(t)              # 位置
v = -sin(t)             # 速度
plot(x, v, 'b-')
xlabel('位置')
ylabel('速度')
title('简谐振子相图')
grid('on')

# 阻尼振子相图
gamma = 0.1
omega = 1
x_damped = exp(-gamma * t) .* cos(omega * t)
v_damped = -exp(-gamma * t) .* (gamma * cos(omega * t) + omega * sin(omega * t))
figure(2)
plot(x_damped, v_damped, 'r-')
xlabel('位置')
ylabel('速度')
title('阻尼振子相图')
grid('on')

示例4:极坐标图(转换为直角坐标)

# 玫瑰曲线 r = sin(k*θ)
theta = linspace(0, 2*pi, 1000)
k = 4
r = abs(sin(k * theta))

# 转换为直角坐标
x = r .* cos(theta)
y = r .* sin(theta)

plot(x, y, 'r-')
title(['玫瑰曲线 r = |sin(', num2str(k), 'θ)|'])
xlabel('x')
ylabel('y')
grid('on')

# 阿基米德螺线 r = a*θ
figure(2)
theta = linspace(0, 4*pi, 1000)
a = 0.5
r = a * theta
x = r .* cos(theta)
y = r .* sin(theta)
plot(x, y, 'b-')
title(['阿基米德螺线 r = ', num2str(a), 'θ'])
xlabel('x')
ylabel('y')
grid('on')

示例5:数据可视化

# 时间序列数据可视化
days = 1:30
temperature = 20 + 5 * sin((days - 1) * 2*pi / 7) + randn(1, 30)
plot(days, temperature, 'ro-')
xlabel('日期')
ylabel('温度 (°C)')
title('30天温度变化')
grid('on')
xlim([0, 31])

# 添加平均线
avg_temp = mean(temperature)
hold('on')
plot([1, 30], [avg_temp, avg_temp], 'b--')
legend(['实际温度', '平均温度'])
hold('off')

示例6:3D参数曲面绘图

# 3D空间中的扭曲环
u = linspace(0, 2*pi, 100)
R = 2
r = 0.5
n_twists = 3

for i = 1:length(u)
    v = linspace(0, 2*pi, 50)
    x = (R + r * cos(n_twists * u(i) + v)) .* cos(u(i))
    y = (R + r * cos(n_twists * u(i) + v)) .* sin(u(i))
    z = r * sin(n_twists * u(i) + v)
    
    if i == 1
        plot3(x, y, z, 'b-')
        hold('on')
    else
        plot3(x, y, z, 'b-')
    end
end
hold('off')
xlabel('X')
ylabel('Y')
zlabel('Z')
title('扭曲环面')
grid('on')

注意事项

图形系统架构

  • TianYuan 的图形系统基于事件驱动,生成绘图事件由外部引擎渲染
  • 默认使用 Python Matplotlib 作为后端
  • 所有绘图命令立即生成事件,但显示可能有延迟

数据要求

  • plotplot3 要求输入为向量(行向量或列向量)
  • 多条曲线需要相同长度的 x 坐标,或使用 hold
  • scatter 的大小和颜色参数必须是标量或与数据点数量匹配的向量

性能考虑

  • 大数据集(>10000点)绘制可能较慢
  • 动画时使用 drawnow() 强制刷新
  • 使用 pause() 控制动画速度
  • 频繁更新图形会影响性能,考虑批量更新

线型和颜色

  • 线型字符串组合:颜色 + 线型 + 标记
  • 颜色: 'r'(红), 'g'(绿), 'b'(蓝), 'c'(青), 'm'(品红), 'y'(黄), 'k'(黑), 'w'(白)
  • 线型: '-'(实线), '--'(虚线), ':'(点线), '-.'(点划线)
  • 标记: 'o'(圆圈), '*'(星号), '.'(点), 'x'(叉号), 's'(方块), 'd'(菱形), '^'(上三角)

最佳实践

  • 总是添加坐标轴标签和标题,使图形自说明
  • 使用网格线提高可读性
  • 多条曲线时使用图例
  • 适当限制坐标轴范围,突出重要区域
  • 使用不同颜色和线型区分不同数据系列