MATLAB绘图操作(二维+三维)

常用小技巧:

想知道哪些可用的函数,输入h = plot(...),不加分号即可打印出句柄的属性

可以使用交互界面配合代码,例如在交互界面移动栏目获取坐标值,然后在代码中固定坐标值

一. 二维图像基本操作

1. 基础作图:plot, fplot, fimplicit与ezplot

①plot用于已知坐标作连续线图(注意:连续线图)

plot(Y):若Y是向量,则图像横轴为序号,纵轴为Y值;若Y为矩阵,则绘制 Y 中各列对其行号的图(多条曲线),横轴的刻度范围是从 1 到 Y的行数。

plot(X, Y):X, Y可以是向量(要求长度相同),可以是矩阵,也可以一个是向量一个是矩阵

plot(X1,Y1,...,Xn,Yn) 绘制多个 X、Y 对组的图,所有线条都使用相同的坐标区

②fplot用于已知显函数表达式或参数方程作函数图像

fplot(func),函数func可以是公用函数名(.m文件名内单独的函数),也可以是私密函数名(脚本后面的函数),也可以是直接的函数表达式

fplot(func, lims),其中lims限定自变量范围,lims=[XMIN XMAX YMIN YMAX][XMIN XMAX]

fplot(符号表达式1, 符号表达式2, lims):新版本中fplot用于替代ezplot的画参数方程功能

  • 注意:函数表达式要么必须定义符号变量,要么必须用匿名函数的形式加@;fimplicit中同理,也要注意

  • 例:

fplot(@(t) 10*sin(t),@(t) 10*cos(t),[0,2*pi])
% 或
syms t
fplot(10*sin(t), 10*cos(t),[0,2*pi])

③fimplicit用于已知隐函数方程作函数图像

fimplicit(f) :在默认区间 [-5 5](对于 x 和 y)上绘制 f(x,y) = 0定义的隐函数

fimplicit(f,lims)

fimplicit(___,LineSpec)

fimplicit(___,Name,Value)

  • 例:

h = fimplicit(@(x,y) y.*sin(x) + x.*cos(y) - 1);
h.Color = 'r';
h.LineStyle = '--';
h.LineWidth = 2;

④ezplot用于已知显函数、隐函数和参数方程作函数图象(不推荐)

  • ezplot会逐渐被fimplicit和flot函数代替

  • 函数fimplicit代替了ezplot画隐函数曲线的功能;fplot代替画参数方程的功能(虽然官网上只说了被fplot代替,没说fimplicit)

  • 注意fplot仅支持一个变量,无法用于画隐函数曲线

2. 一些杂七杂八但很常用的操作

subplot(2,3,6) % 将多个图画到一张图上
plot(x2,y2)

% 用句柄进行画图操作,就不用在plot里添加一堆属性了:
h = plot(x,y);
h.LineWidth = 2; % 改变线宽
h.FontSize = 12 % 改变字体大小


title('线性电阻的伏安特性曲线') % 添加图表标题

text(0.8,200,'R1=9.99Ω') % 添加标注
text(5,50,'R2=1022Ω')
legend('10Ω','1kΩ');  % 添加图例


% 坐标轴 %

xlabel('电压U/V'); % 添加x轴名称
ylabel('电流I/mA'); 
xlim([2, 46]); % 设定x轴的绘制范围
set(gca,'XTick',[2:2:46]) % 改变x轴坐标间隔显示 这里间隔为2
set(gca,'FontSize',20); % 设置坐标轴的数字大小,包括legend文字大小:
axis equal % 坐标轴相等,长方形变正方形
axis off % 隐藏坐标轴


%在图中标出每一点纵坐标
for i=1:8
    text(x(1,i),y(1,i),num2str(y(1,i)));% num2str表示数字到字符的转换
end

%任意位置四舍五入
a=roundn(a,-4) % 保留四位小数

color bar % 添加颜色bar
h.AlphaData = .5; % 利用句柄改变图像透明度
fg1 = figure('numbertitle','off','name','自定义文件名'); 
  • 注:如果subplot的话,无法画大标题

二. 二维图像进阶操作

0. gcf与gca

句柄

说明

gcf()

返回当前图形对象的句柄值,get current figure,通常不用

gca()

返回当前坐标轴对象的句柄值,get current axis

1. imagesc()

教程:https://www.cnblogs.com/MCSFX/p/11976372.html

  • imagesc(A) 将数组 A 中的数据显示为一个图像,该图像使用颜色图中的全部颜色。A 的每个元素指定图像的一个像素的颜色。生成的图像是一个 m×n 像素网格,其中 mn 分别是 A 中的行数和列数。这些元素的行索引和列索引确定了对应像素的中心

  • 简单的说,就是显示RGB图像:一个数值对应一个颜色块,数值越相近颜色则越相近,数值相同则颜色相同

% 例子:研究9~24阶幻方矩阵的分布情况
for n = 1:16
    subplot(4,4,n)
    ord = n+8;
    m = magic(ord); % 幻方矩阵
    imagesc(m)
    title(num2str(ord))
    axis equal
    axis off
    color bar
end

  • 应用:作热力图、等高线;向三维视图中的坐标区添加图像

Z = 10 + peaks; % 向上平移10,以便画xy平面上的图像
surf(Z)
hold on
imagesc(Z)

2. gscatter

  • gscatter(x, y, group) 按分组绘制散点图

  • gscatter(x, y, group, clr, sym, siz) 为每组设置颜色clr,符号sym和大小siz

例:

A=magic(6);
group=[1,2,3,3,2,3];
gscatter(A(:,1),A(:,2),group);
%	此处magic为神奇的幻方矩阵,虽然是6x6,但此处只用到了其第一列与第二列,以第一列为x,第二列为y,进行对应的group分组

3. 坐标轴的高级设置

教程:官网较全的总结,这里选取部分常用的

  • xtickangle(ax, angle) 设置x轴刻度转过的角度,避免重叠

  • xtickformat(ax, format) 将x轴刻度按规定格式显示


标识符

说明

显示结果

d或i

底数为10的有符号整数,精度指示有效位数

'%.4d' 0003

f

定点计数法,精度指示小数位数

'%.4f' 3.1416

e

指数计数法,精度指示小数位数

'%.4e' 3.1416×10

g

不带尾随零,精度指示最大小数位数

'%.4g' 3.1416

  • xticks(x) 显示数组x处的刻度值

  • xticklabels({'','',''}) 将x轴刻度值显示为{'...','...','...'}

  • xlim([2, 46]) 设定x轴的绘制范围

  • set(gca,'XTick',[2:2:46]) 改变x轴坐标间隔显示 这里间隔为2

  • set(gca,'FontSize',20) 设置坐标轴的数字大小,包括legend文字大小

4. 等值线的绘制

教程:轩轩的CSDN

(见教程)

三. 三维图像基本操作

教程:较全的总结

①surf:绘制三维曲面

  • surf(x, y, z)

x = 1:100; % 1x100矩阵
y = 101:200; % 1x100矩阵
z = x'*y % 100x100矩阵
surf(x, y, z);
  • surf(z):若z=mxn,则默认x=0:m, y=0:n

②mesh:绘制三维网格

  • mesh(x,y,z)

③plot3:绘制三维曲线

  • ①~③三者对比

t=-2:0.1:2;
s=-1:0.1:3
[x,y]=meshgrid(t,s);
z=x.*exp(-x.^2-y.^2);

subplot(1,3,1);
plot3(x,y,z);
title('三维曲线');

subplot(1,3,2);
mesh(x,y,z);
title('mesh');

subplot(1,3,3);
surf(x,y,z);
title('surf');

④fsurf与fmesh

  • fsurf(x,y,z,[umin,umax,vmin,vmax]);

  • 这两个函数就是用来绘制参数方程定义的三维曲面,和fplot3函数很像,需要用到函数句柄

  • 例:作三维螺旋曲面

x=@(u,v) u*sin(v);
y=@(u,v) -u*cos(v);
z=@(u,v) v;

fsurf(x,y,z,[-5,5,-2,2]);
grid on;
title('螺旋曲面');
xlabel('x=usinv');
ylabel('y=-ucosv');
zlabel('z=v');

⑤meshgrid:创建网格

  • [X,Y] = meshgrid(x,y):根据向量x,y创建网格矩阵X,Y

  • 这样子就可以直接用函数的形式,用自变量XY表示因变量Z了

x = 1:3;
y = 1:5;
[X,Y] = meshgrid(x,y)
Z = X.^2 + Y.^2
X = 5×3

     1     2     3
     1     2     3
     1     2     3
     1     2     3
     1     2     3

Y = 5×3

     1     1     1
     2     2     2
     3     3     3
     4     4     4
     5     5     5
     
Z = 5×3

     2     5    10
     5     8    13
    10    13    18
    17    20    25
    26    29    34

四. 三维图像进阶操作

①peaks

peaks 函数是一个典型的多元函数,本质上是一个二元高斯分布的概率密度函数,表达式如下: blockformula_editorf(x,y)=3(1−x)^2e^{−x^2−(y+1)^2}−10(\frac{1}{5}x−x^3−y^5)e^{−x^2−y^2}−\frac{1}{3}e^{−(x+1)^2−y^2}

  • z = peaks:生成49x49的矩阵,默认x,y=0:49

  • z = peaks(n):生成nxn的矩阵,默认x,y=0:n

  • peaks(n):没有输出参数z时,这个函数可以直接进行绘制peaks,默认n为49

clc;clear;close all; % 1,1~5,5
figure(1);
z=peaks(5);
surf(z);

figure(2); % -3,-3~3,3
peaks(5);%没有输出值的peaks函数直接绘制表面图

[x,y,z]=peaks(5); % -3,-3~3,3
figure(3);
surf(x,y,z);%注意图像2和图像3坐标的差异性,相当于平移了

②view

  • view可以改变对三维视图的视角

  • view(3):恢复默认的三视图视角

  • view(ez,el):设置方位角为ez,俯角为el:[0,0]为正视图,[90,0]为侧视图,[0,90]为俯视图

③颜色控制

教程:轩轩的CSDN

a) colormap

  • 用于修改色轴,即修改图形的颜色

b) brighten

  • 调整色轴明度

c) caxis

  • 设置函数值映射到色轴两端的最大值与最小值,一般默认

d) colorbar

  • 显示颜色条,分横条与竖条两种

e) surf属性

  • 可以调整曲面透明度、网线颜色,作热力图等


本文章使用limfx的vscode插件快速发布