MATLAB 绘图(二)
本次的内容涉及到除了线图以外的绘图,包括离散绘图、极坐标绘图、曲面绘图和统计绘图。
subplot 函数指的是将当前图窗划分为
m
×
n
网格,并在编号
p
指定的位置创建坐标区。
编号规则为:从第一行自左向右递增。
% subplot(m,n,p);
% 将绘图窗口分为 m 行 n 列的矩形区域
% 并在编号第 p 的区域中绘图
figure();
% 2*2 分割的第一块区域也就是左上角
subplot(2,2,1);
x = linspace(-3.8,3.8);
y_cos = cos(x);
plot(x,y_cos);
title('Subplot 1: Cosine')
% 2*2 分割的第二块区域也就是右上角
subplot(2,2,2);
y_poly = 1 - x.^2./2 + x.^4./24;
plot(x,y_poly,'g');
title('Subplot 2: Polynomial')
% 2*2 分割的第三、四块区域也就是下方
subplot(2,2,[3,4]);
% 也可以写作 subplot(2,1,2); 指的是同一区域。
plot(x,y_cos,'b',x,y_poly,'g');
title('Subplot 3 and 4: Both')
我们直到直角坐标和极坐标系都是常用的坐标系,并且两种坐标系之间存在一定的转换关系,但是用 plot 函数绘制转换后的极坐标系图形总是不美观。
polar 函数是 MATLAB 中用于绘制极坐标图的函数。
polar 函数已经被 MATLAB 官方更替,更推荐使用的是新的函数方法:polarplot (新方法在旧版本的 MATLAB 如 2015b 版本仍不可用)。因此如果你在使用旧版本软件,使用 polar 方法;如果你在使用的版本支持 polarplot 函数,那就使用 polarplot 函数。
polarplot 函数就是极坐标系下的 plot 函数。以 polarplot(theta,rho) 形式调用。
theta = 0:0.01:2*pi; % 角度
rho = sin(2*theta).*cos(2*theta); % 幅值
figure(1);
polarplot(theta,rho);
% 此处有版本兼容问题,旧版本无法使用该函数
% 旧版本应当使用 polar(theta,rho);
surf 函数
surf 函数将创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度;此外,函数将对三维曲面进行渲染,每个区域的颜色与高度成比例。
x0 = 1:0.5:10;
y0 = 1:20;
[X,Y] = meshgrid(x0,y0);
% meshgrid 函数将创建两个由 x0*y0 构成的二维网格矩阵。
% X 表示网格中对应位置的 x0 值
% Y 表示网格中对应位置的 y0 值
% - 可以预见到对于同一个 y0 ,x0 值相同。
Z = sin(X) + cos(Y);
surf(X,Y,Z);
mesh 函数
surf 函数将创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度;函数仅对于三维网格进行渲染,每个区域的颜色与高度成比例。
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
figure(1);
mesh(Z);
由于统计图表有着多种形式的表现需求,这里使用子窗口绘图来实现。
x = 190:1:200;
y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
z = [2 2 3; 2 5 6; 2 8 9; 2 11 12];
figure(1);
subplot(2,3,1);
bar(y);
subplot(2,3,2);
bar(y,'r')
subplot(2,3,3);
bar(x,y);
subplot(2,3,4);
bar(y,0.4);
subplot(2,3,5);
bar(z);
subplot(2,3,6);
bar(z,'stacked')
本节中提到除了线图以外的另外四种常见绘图:离散绘图、极坐标绘图、曲面绘图和统计绘图。
值得一提的是,对于极坐标绘图的函数方法,官方已经给出更佳的更新,但旧版本中无法应用,这里给出的为新版本的方案。