绘图函数
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 作为后端
- 所有绘图命令立即生成事件,但显示可能有延迟
数据要求
plot 和 plot3 要求输入为向量(行向量或列向量)
- 多条曲线需要相同长度的 x 坐标,或使用
hold
scatter 的大小和颜色参数必须是标量或与数据点数量匹配的向量
性能考虑
- 大数据集(>10000点)绘制可能较慢
- 动画时使用
drawnow() 强制刷新
- 使用
pause() 控制动画速度
- 频繁更新图形会影响性能,考虑批量更新
线型和颜色
- 线型字符串组合:颜色 + 线型 + 标记
- 颜色: 'r'(红), 'g'(绿), 'b'(蓝), 'c'(青), 'm'(品红), 'y'(黄), 'k'(黑), 'w'(白)
- 线型: '-'(实线), '--'(虚线), ':'(点线), '-.'(点划线)
- 标记: 'o'(圆圈), '*'(星号), '.'(点), 'x'(叉号), 's'(方块), 'd'(菱形), '^'(上三角)
最佳实践
- 总是添加坐标轴标签和标题,使图形自说明
- 使用网格线提高可读性
- 多条曲线时使用图例
- 适当限制坐标轴范围,突出重要区域
- 使用不同颜色和线型区分不同数据系列