Matlab作图
文章目录matlab线性 标记 颜色曲线图对数坐标三维图像空间曲线空间曲面图形处理图形上加格栅、图例和标注图形交互标注定制坐标多窗口分割窗口图形缩放改变观察视角matlab线性 标记 颜色曲线图在[0,2*pi]用红线画sin(x),用绿圈画cos(x)%%% 画曲线x = linspace(0, 2 * pi, 30);y = sin(x);z = cos(x);plot(x, y, 'r',
·
文章目录
matlab线性 标记 颜色

曲线图
- 在[0,2*pi]用红线画sin(x),用绿圈画cos(x)
%%
% 画曲线
x = linspace(0, 2 * pi, 30);
y = sin(x);
z = cos(x);
plot(x, y, 'r', x, z, 'c'); % r 红色, c 蓝绿色

%%
% 符号函数画图
ezplot('sin(x)', [0, pi]);
%%
% 四角图形
ezplot('cos(t)^3', 'sin(t)^3', [0, 2*pi]);
%%
% 函数图像
ezplot('exp(x)+sin(x*y)', [-2, 0.5, 0, 2]); % 范围 x: -2, 0.5, y: 0, 2;
%%
% fplot 函数 fplot('fun', lims)
% 表示绘制字符串fun函数在lims=[xmin, xmax]的图形
% - fun 必须是m文件函数名 或者 独立变量的字符串
% - fplot函数不能画参数方程和隐函数图形 可在一个图上画多个图形
fplot('exp(2*x)+sin(3*x^2)', [-1, 2]);
%%
% tanh(x) 函数图像
fplot('tanh(x)', [-2, 2]);
%%
% 同时画 tanh(x) sin(x) cos(x) 三个图像
fplot('[tanh(x), sin(x), cos(x)]', 2*pi*[-1 1 -1 1]);
对数坐标
%%
% 对数坐标图
% loglog 双对数坐标转换, semilogx x轴对数坐标 semilogy y轴对数坐标
% plotyy 命令 一个在左边一个在右边
% 双对数坐标
x = logspace(-1, 2);
loglog(x, exp(x), '-s'); % 实线 正方形
grid on;
%%
% 简单半对数坐标
x = 0: 0.1: 10;
semilogy(x, 10.^x);


三维图像
空间曲线
%%
% 简单三维曲线
t = 0:pi/50:10*pi;
x = sin(t);
y = cos(t);
z = t;
plot3(x, y, z, ':'); % x y z分别是横坐标 纵坐标 函数值 可指定 线性 颜色
rotate3d; % 开启3d旋转

%%
% 多条曲线
x = -3: 0.1: 3;
y = 1: 0.1: 5;
[X, Y] = meshgrid(x, y);
Z = (X+Y).^2;
plot3(X, Y, Z);
rotate3d;

空间曲面
%%
% 空间简单曲面
x = -3: 0.1: 3;
y = 1: 0.1: 5;
[X, Y] = meshgrid(x, y); % 网格化
Z = (X + Y).^2;
surf(X, Y, Z); % 表示横坐标, 纵坐标 函数值
shading flat; % 图形平滑

%%
% 网格曲面
x = -3: 0.1: 3;
y = 1: 0.1: 5;
[X, Y] = meshgrid(x, y); % 网格化
Z = (X + Y).^2; % 表示横坐标, 纵坐标 函数值
mesh(X, Y, Z);

meshc(x, y, z) 在x0y面有映射曲线
% 马鞍面 (双曲抛物面)
subplot(1, 2, 2);
[X, Y] = meshgrid(-7:0.1:7);
Z = X.^2./8-Y.^2./6;
meshc(X, Y, Z);
view(30, 30); % 正数逆时针旋转
% 标注
title('马鞍面');
xlabel('x'); ylabel('y'); zlabel('z');
rotate3d(); % 可旋转观察

%%
% 绘制peaks的网格图
% 网格周围画 curtain图
[X, Y] = meshgrid(-3: 0.125: 3);
Z = peaks(X, Y);
meshz(X, Y, Z); % z 的值与网格对应

图形处理
图形上加格栅、图例和标注
grid on;grid off;
%%
clc;clear; %清除变量
x = linspace(0, 2*pi, 30);
y = sin(x);
plot(x, y);
xlabel('x轴');
ylabel('y轴');
title('y = sin(x) 图像'); % 为图像加标题
grid on; % 开启格栅

图形交互标注
%%
% 图形鼠标标注
x = linspace(0, 2*pi, 30);
y = sin(x);
z = cos(x);
plot(x, y, x, z); % 画两个图像
gtext('sin(x)');
gtext('cos(x)');

定制坐标
%%
% 定制坐标Axis([xmin xmax ymin ymax zmin max]) 定制图形坐标
%在区间[0.005, 0.01]显示 sin(1/x)的图形
x = linspace(0.0001, 0.01, 1000);
y = sin(1./x);
plot(x, y);
axis([0.005, 0.01, -1 1]); % 定制坐标

hold on保持当前窗口hold off释放当前窗口
%%
% 坐标系内的两个图像
x = linspace(0, 2*pi, 30);
y = sin(x);
z = cos(x);
plot(x, z, ':');
hold on;
plot(x, y);

多窗口
%%
% figure(h) 新建h 窗口 激活图形使其可见, 并置于其他图形之上
% [0, 2*pi] 上两个窗口画y = sin(x) z = cos(x)
x = linspace(0, 2*pi, 100);
y = sin(x);
z = cos(x);
plot(x, y);
title('y = sin(x)');
pause; % 暂停
figure(2);
plot(x, z);
title('z = cos(x)');
分割窗口
%%
% 一个多个窗口和
x = linspace(0, 2*pi, 100);
y = sin(x);
z = cos(x);
a = sin(x).*cos(x);
b = sin(x)./(cos(x) + eps);
subplot(2, 2, 1); plot(x, y); title('sin(x)');
subplot(2, 2, 2); plot(x, z); title('cos(x)');
subplot(2, 2, 3); plot(x, a); title('sin(x).*cos(x)');
subplot(2, 2, 4); plot(x, b); title('sin(x)./cos(x)');

图形缩放
%%
% 缩放图形
x = linspace(0, 2*pi, 100);
y = sin(x);
plot(x, y);
zoom on;

改变观察视角
%%
%%
% view(a, b) 命令view(a, b), a是方位角, b是仰角
% view([x,y, z]) 空间矢量 关心比例数 与数值的大小无关
clc;
x = -3:0.1:3;
y = 1:0.1:5;
[X, Y] = meshgrid(x, y);
Z = (X + Y).^2;
subplot(2, 2, 1); mesh(X, Y, Z);
subplot(2, 2, 2); mesh(X, Y, Z); view(50, -34);
subplot(2, 2, 3); mesh(X, Y, Z); view(-60, 70);
subplot(2, 2, 4); mesh(X, Y, Z); view([0, 1, 1]);

动画
%%
% 动画
% Moviein() 产生一个帧矩阵
% getframe 对当前图像进行快照
% movie() 按照顺序回放个号各帧
clc;
[x, y, z] = peaks(30);
surf(x, y, z);
axis([-3 3 -3 3 -10 10]);
m = moviein(15);
% getframe 对图像进行快照
for i=1:15
view(-37.5+ 24*(i - 1),30);
m(:, i) = getframe;
end
movie(m);


特殊的二维图形
极坐标图
%%
% 极坐标图 polar(theta, rho, s) theta角度, rho 为长度
theta = linspace(0, 2*pi);
rho = sin(2*theta).*cos(2*theta);
polar(theta, rho, 'g');
title('Polar plot of sin (2*theta).*cos(2*theta)');

二维散点图
%%
% scatter(x, y, s, c)
% x, y 指定位置显示彩色圈, x, y 大小必须相同
clc;clear;
load seamount
scatter(x, y, 5, z)

二维平面等值线图
%%
% 平面直线图, contour(x, y, z, n) 绘制n个等值线的二维等值线图
[X, Y] = meshgrid(-2:.2:2, -2:.2:3);
Z = X.*exp(-X.^2 - Y.^2);
[C, h] = contour(X, Y, Z);
clabel(C, h);
colormap cool;

特殊三维图形函数
三维等值线
%%
% 空间等值线
[x, y, z] = peaks;
subplot(1, 2, 1);
contour3(x, y, z, 16, 's'); % 16个等值线
grid on;
xlabel('x-axis');ylabel('y-axis');
zlabel('z-axis');
title('contour3 of peaks');
subplot(1, 2, 2);
contour(x, y, z, 16, 's'); % 二维等值线
grid on;
xlabel('x-axis');ylabel('y-axis');
zlabel('z-axis');
title('contour of peaks');

三维散点图
%%
% 空间散点图
clc;clear;
[x, y, z] = sphere();
X = [x(:)*.5 x(:)*.75 x(:)];
Y = [y(:)*.5 y(:)*.75 y(:)];
Z = [z(:)*.5 z(:)*.75 z(:)];
S = repmat([1 .75 .5] * 10, prod(size(x)), 1);
C = repmat([1 2 3], prod(size(x)), 1);
scatter3(X(:), Y(:), Z(:), S(:), C(:), 'filled');
view(-60, 60);

%%
% sphere 函数用于生成单位球面的 x,y,z 的坐标,以用于 surf or mesh。默认生成 20 x 20 个面的球面。
% [X,Y,Z] = sphere(...) % 在三个 (n+1)x(n+1)的矩阵内存储 n x n 个球面的坐标
[x, y, z]= sphere(20);
surf(x, y, z); % 绘制球面的坐标
view(3);

更多推荐

所有评论(0)