MATLAB学习笔记(三、进阶绘图)

一、Advanced 2D plots

y = logspace(a,b,n) :10a 和 10b 之间生成 n 个点。

1.Logarithm Plots

先上一段代码
semilogx, semilogy, loglog三个半对数函数的解释在下面的 tips

x = logspace(-1, 1, 100);
y = x .^2;
subplot(2, 2, 1);
plot(x ,y);
title('Plot');
subplot(2,2,2);
semilogx(x, y);    %
title('Semilogx');
subplot(2,2,3);
semilogy(x, y);    %
title('Semilogy');
subplot(2,2,4);
loglog(x, y);      %
title('LogLog');

tips:
(1)semilogx :x轴上的坐标取对数
(2)semilogy :y轴上的坐标取对数
(3)loglog :x, y轴上的坐标均取对数
绘出图像——
在这里插入图片描述

2.Plotyy and yyaxis

有时候我们分析需要直观分析两段函数,但两段函数的y轴难以统一时,就可以用到 plotyy 函数,这里我们只讲一个用法:
help 英文原文:
[AX,H1,H2] = plotyy(…) returns the handles of the two axes created in AX and the handles of the graphics objects from each plot in H1and H2.
AX(1) is the left axes and AX(2) is the right axes.
翻译:
返回AX中创建的两个坐标轴的句柄以及H1和H2中每个图形绘图对象的句柄。AX(1)为左侧轴,AX(2)为右侧轴。

x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
[AX,H1,H2] = plotyy(x, y1, x, y2);    % H1 即(x, y1)图像; H2 即(x, y2)图像
set(get(AX(1), 'Ylabel'), 'String', 'Left Y-axis');    % 左侧轴上的标签写为‘'Left Y-axis’
set(get(AX(2), 'Ylabel'), 'String', 'Right Y-axis');   % 右侧轴上的标签写为‘'Right Y-axis’
title('Labeling plotyy');
set(H1, 'LineStyle', '--');    % 绘出H1图像
set(H2, 'LineStyle', ':');     % 绘出H2图像

绘出图像——
在这里插入图片描述
alternative
其实还有一种方式也可以达到同样的效果哟,那就是 yyaxis 函数(只支持2016及以上版本):
在这里插入图片描述

x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
yyaxis left       % 后续命令的目标为左侧
plot(x,y1, '--');
ylabel('Left Y-axis');

y2 = 0.8*exp(-0.5*x).*sin(10*x);
yyaxis right      % 后续命令的目标为右侧
plot(x,y2, ':');
ylabel('Right Y-axis');
title('Labeling plotyy');

绘出图像——(跟前面 2.Plotyy 效果完全一样)
在这里插入图片描述

3.Histogram 直方图

有时候我们数据处理需要直方图

y = randn(1, 1000); 
subplot(2,1,1);
hist(y,10);
title('Bins = 10');
subplot(2,1,2);
hist(y,50);
title('Bins = 50');

tips:
一个函数注意一下:
hist(y, n) : 产生n个bin,比如你看第一个hist(y, 10),下面绘出的第一幅图就是10个方块

绘出图像——在这里插入图片描述

4.Bar Charts 条形统计图

有时候我们数据处理需要条形统计图

x = [1 2 5 4 8]; y = [x;1:5];   % x中有1 2 5 4 8 五个值,y = [x;1:5] = [1 2 5 4 8; 1 2 3 4 5]
subplot(1,3,1); bar(x); title('A bargraph of vector x');
ylim([0,8]);
subplot(1,3,2); bar(y); title('A bargraph of vector y');
ylim([0,8]);
subplot(1,3,3); bar3(y); title('A 3D bargraph');

tips:
两个函数注意一下:
(1) bar(y): 创建一个条形图,y 中的每个元素对应一个条形。如果 y 是矩阵,则 bar 根据 y 中的行对条形分组
(2)bar3(Z): 绘制三维条形图,Z 中的每个元素对应一个条形图。如果 Z 是向量,y 轴的刻度范围是从 1 至 length(Z)。如果 Z 是矩阵,则 y 轴的刻度范围是从 1 到 Z 的行数。

绘出图像——
在这里插入图片描述

5.Stacked and Horizontal Bar Charts 堆积图 和 横条图

有时候我们会需要用到 堆积图 和 横条图

绘出图像——
在这里插入图片描述
代码如下:
在这里插入图片描述
tips:
两个函数注意一下:
(1)bar(y, ‘stacked’): 创建堆积图
(2)barh(Z): 创建横条图

6.Pie Charts 饼图

操作如下,与前文相似在这里插入图片描述
tips:
pie(a, [0, 0,0,1]) 中的[0,0,0,1],有4个数字,表示有4块区域,0代表不分离,1代表突出该块分离(看图理解)。

7.Stairs and Stem Charts 阶梯状图 和 杆状图

由于有了前面的基础,下面两种图很容易理解,不再赘述。
在这里插入图片描述

8.Boxplot and Error Bar 箱体图 和 误差条图

在这里插入图片描述

二、Color space

在这里插入图片描述

三、3D plots

共有如下函数,我们详细讲几个函数。

在这里插入图片描述

1. plot3 : plot3()

plot3(x, y, ‘color’):在3D中创建color色的y曲线。

我们来看一段示例代码:

x = 0:0.1:3*pi;
z1 = sin(x); z2 = sin(2*x); z3 = sin(3*x);
y1 = zeros(size(x)); 
               % y1是1 x size(x)的全0矩阵(其y坐标就是0);
y3 = ones(size(x)); y2 = y3./2;  
               % y3坐标是1 x size(x)的全1矩阵(其y坐标就是1),y2坐标就是0.5
 
plot3(x, y1, z1, 'r', x, y2, z2, 'b', x, y3, z3, 'g');    % 绘制三条空间曲线
grid on;               % 加网格线
xlabel('x-axis'); ylabel('y-axis'); zlabel('z-axis');

绘制的3D图形如下(你还可以点击蓝色箭头指向的工具进行三维旋转):
在这里插入图片描述

2. Surface Plots : meshgrid()、mesh()、surf()

(1) [x y]=meshgrid(a,b):该形式用来生成二维网格矩阵。

举个例子:

a=[1 2 3]; b= [2 3 4];
>> [x y]=meshgrid(a,b)
x =
    1     2     3
    1     2     3
    1     2     3
y =
    2     2     2
    3     3     3
    4     4     4    

因为此处a x b生成的是 3 x 3的矩阵,xy才是3 x 3;
根据线性代数中秩的知识,a是行向量,b是列向量,xy 应该是R(b) x R(a)的矩阵
再比方说 a=[1 2 3]; b= [2 3]; 则生成的 X 和 Y 都是为 3X2 维的矩阵

a=[1 2 3]; b= [2 3];     
>> [x y]=meshgrid(a,b)
x =
    1     2     3
    1     2     3
y =
    2     2     2
    3     3     3

此时
另外可以看出来矩阵x的每行都相同,矩阵y的每列都相同(疯狂暗示a,b)
有关该函数更详细的信息可以参考:
https://blog.csdn.net/u013346007/article/details/54581253

(2)mesh(X,Y,Z):使用 Z 确定的颜色绘制线框网格,因此其颜色与曲面高度成比例。 参数X,Y,Z都是矩阵值规模都是相同的(至于怎么扩展成相同的,一般用的是meshgrid函数设置矩形网络)

(3)surf(X,Y,Z): 创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。函数还对颜色数据使用 Z,因此颜色与高度成比例(像不像等高线?)。参数X,Y,Z都是矩阵值规模都是相同的(至于怎么扩展成相同的,一般用的是meshgrid函数设置矩形网络)

有关该函数更详细的信息可以参考:
https://ww2.mathworks.cn/help/matlab/ref/surf.html

下面综合前面学的三个函数,我们来看一个例子
在这里插入图片描述

tips: 左边是 网格图,而右边是 曲面图,就像在网格上面上了色
注意两个图的等高位置都是同样颜色。

2. Various Contour Plots : clabel()、contour()、contourf()

我们来看看多种多样的3D上色方式:

在这里插入图片描述
再来认识一下几个函数:
(1)clabel(C,h): 为当前等高线图添加标签,将旋转文本插入每条等高线。
注意: 等高线必须足够长以容纳标签,否则 clabel 无法插入标签。如果没有等高线矩阵 C,则将 C 替换为 []。

有关该函数更详细的信息可以参考:
https://ww2.mathworks.cn/help/matlab/ref/clabel.html?s_tid=doc_ta

(2)contour(Z,v): 绘制矩阵 Z 的等高线图,其中等高线位于单调递增向量 v 中指定的数据值。要在特定值位置显示单个等高线,请将 v 定义为一个二元素向量,并且两个元素都等于所需的等高线层级。

例如,要在 k 层级绘制等高线,请使用 contour(Z,[k k])。
又例如,要在-0.45到0.45每隔0.05的高度用不同颜色画出等高线,请使用 contour(Z, (-.45:.05:.45)) 或者 contour(Z, [-.45:.05:.45])(使用[]方括号可能会有警告)。

[C,h] = contour(Z) :返回矩阵 Z 的等高线矩阵 C(包含定义等高线的数据)和 Contour 对象 h。

有关该函数更详细的信息可以参考:
https://ww2.mathworks.cn/help/matlab/ref/contour.html?s_tid=doc_ta

(3)contourf():就是contour fill函数,给contour绘制出来的函数fill色彩。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
结合前面三个函数看绘制出上面三个图的代码

x = -3.5:0.2:3.5; y = -3.5:0.2:3.5;
[X,Y] = meshgrid(x,y);         % 设置矩形网络
Z = X .* exp(-X.^2 - Y.^2);
subplot(1,3,1); contour(Z, (-.45:.05:.45)); axis square;    %根据梯度设置等高线
subplot(1,3,2); [C,h] = contour(Z);      % 
clabel(C,h); axis square;              % clabel 为等高线添加标签。
subplot(1,3,3); contourf(Z); axis square;

本笔记多采自YouTubeMATLAB教学视频

猜你喜欢

转载自blog.csdn.net/weixin_43469047/article/details/86687692
今日推荐