Matlab
1.绘制二维曲线(反应两个变量的因果关系)
%绘制二维曲线
clear;clc;close all;
x = linspace(1, 200, 100);%均匀生成数字1~200,共计100个
y1 = log(x) + 1;%生成函数y=log(x)+1
y2 = log(x) + 2;%生成函数y=log(x)+2
figure;%创建图窗
plot(x, y1);%作图 y=log(x)+1
hold on %多图共存在一个窗口上
plot(x, y2, 'LineWidth', 2);%作图 y=log(x)+2,LineWidth指线型的宽度,粗细尺寸2
hold off %关闭多图共存在一个窗口上
legend('y1', 'y2');%生成图例 y1和y2
r(红) g(绿) b(蓝) c(蓝绿) m(紫红) y(黄) k(黑) w(白)
linspace
y = linspace(x1, x2, n)
步长:![]()
2.二维散点图(用来比较理论数据和实验数据的趋势关系)
figure;
x = linspace(1, 200, 100);%均匀生成数字1~200,共计100个
y1 = log(x) + 1;%生成函数y=log(x)+1
y3 = y1 + rand(1, 100) - 0.5;
plot(x, y1, 'LineWidth', 2, 'Color', [0.21, 0.21, 0.67]);
hold on
% 设置数据点的形状、数据点的填充颜色、数据点的轮廓颜色
plot(x, y3, 'o', 'LineWidth', 2, 'Color', [0.46, 0.63, 0.90], ...
'MarkerFaceColor', [0.35, 0.90, 0.89],'MarkerEdgeColor', [0.18, 0.62, 0.17]);
hold off
MATLAB中:
MarkerFaceColor用于设置内部填充颜色
MarkerEdgeColor用于设置外部边框颜色
3.二维渐变图(用不同的颜色、数据点大小表征不同数值,更加直观)
%绘制二维渐变图
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);%随机生成200个位于[0,1]的数字
sz = 25;%尺寸为25
c = linspace(1,10,length(x));
scatter(x,y,sz,c,'filled')
scatter函数用法:
● scatter(x,y) 在向量 x 和 y 指定的位置创建一个包含圆形标记的散点图。
● 要绘制一组坐标,请将 x 和 y 指定为等长向量。
● 要在同一组坐标区上绘制多组坐标,请将 x 或 y 中的至少一个指定为矩阵。
● scatter(x,y,sz) sz指定圆大小。要对所有圆使用相同的大小,请将 sz 指定为标量。 要绘制不同大小的每个圆,请将 sz 指定为向量或矩阵。
● scatter(x,y,sz,c) c指定圆颜色。可以为所有圆指定一种颜色,也可以更改颜色。 例如,可以通过将 c 指定为 'red' 来绘制所有红色圆。
● scatter(___,'filled') 填充圆。可以将 'filled' 选项与前面语法中的任何输入参数组合一起使用。
普通绘制
% 创建散点图
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);
scatter(x,y)
改变圆圈大小
% 改变圆圈大小
% 使用大小不同的圆圈创建一个散点图
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);
sz = linspace(1,100,200);%均与产生位于(1,100)的200个随机数指定圆圈的大小
scatter(x,y,sz)
改变圆圈的颜色(渐变效果)
% 改变圆圈颜色
% 创建一个散点图并改变圆圈的颜色
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);
%均匀生成位于(1,10)的随机数指定每个圆圈的颜色,达到渐变的效果
c = linspace(1,10,length(x));
scatter(x,y,[],c);%[]代表不指定参数,此处为sz:圆圈的大小
填充标记
% 填充标记
% 创建一个散点图并填充标记
% scatter 使用圆圈边的颜色填充每个圆圈
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);
sz = 25;%圆圈的大小
c = linspace(1,10,length(x));
scatter(x,y,sz,c,'filled')
自定义标记
% 标记类型
% 创建一个散点图并自定义标记
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);
sz = 25;%标记的大小
c = linspace(1,10,length(x));
scatter(x,y,sz,c,'filled','hexagram')
对于有些标记不能指定填充,如*,此时图窗显示空白
4.条形图
%条形图
A=[60.689;87.714;143.1;267.9515];%列向量
C=[127.5;160.4;231.9;400.2];
B=C-A;
D=[A,B,C];
%[2:5:17]生成2-17之间的向量,步长为5
%[2:5:17]:参数x,条形在x轴的位置
%A:参数y,条形的高度
bar1=bar([2:5:17],A,'BarWidth',0.2,'FaceColor','r');
hold on;
bar2=bar([3:5:18],B,'BarWidth',0.2,'FaceColor',[0.5 0.5 0.5]);
bar3=bar([4:5:19],C,'BarWidth',0.2,'FaceColor','w');
hold off
ylabel('耗时/s')%x标签
xlabel('GMM阶数')%y标签
legend('训练耗时','测试耗时','总耗时');%图例
labelID={ '8阶','16阶','32阶','64阶'};
%gca:代表当前坐标区域或图
set(gca,'XTick',3:5:20);%设置x轴坐标显示位置
%设置x轴坐标显示位置的显示标签,不设置就显示位置的具体数值
set(gca,'XTickLabel',labelID)
5.填充图
%填充图
x = 0.4:0.1:2*pi;%范围为0.4-2*pi,步长为0.1的向量
y1 = sin(2*x);
y2 = sin(x);
% 确定 y1 和 y2 的上下边界
maxY = max([y1; y2]);
minY = min([y1; y2]);
% 确定填充多边形,按照顺时针方向来确定点
% fliplr 实现左右翻转
xFill = [x, fliplr(x)];
yFill = [maxY, fliplr(minY)];
figure
fill(xFill,yFill,[0.21, 0.21, 0.67])
hold on
% 绘制轮廓线
plot(x, y1, 'r', 'LineWidth', 2)
plot(x, y2, 'r', 'LineWidth', 2)
hold off
6.多y轴图
%多y轴图
figure;
x=linspace(1, 200, 20);%均匀生成数字1~200,共计20个
y1=log(x) + 1;%生成函数y=log(x)+1
y2=x;%生成函数y=x
yyaxis left%左y轴
scatter(x, y1, 'LineWidth', 2);
title('多y轴图');
xlabel('x');
ylabel('y1');
yyaxis right%右y轴
scatter(x, y2, 'LineWidth', 2);
ylabel('y2');
7.二维场图
%二维场图
%meshgrid用于生成二维网格点坐标矩阵
%通常用于绘制三维图形时,需要定义X-Y平面上的点的坐标
%meshgrid函数接受两个向量作为输入,分别代表X轴和Y轴上的点
%函数输出两个矩阵x和y
%这两个矩阵的大小是相同的,矩阵中的每个元素对应于二维网格上的一个点
%矩阵x中的每一行都是输入的第一个向量的复制,表示该行所有点的X坐标
%矩阵y中的每一列都是输入的第二个向量的复制,表示该列所有点的Y坐标
%队下面调用,x和y矩阵的大小都是11x11
% x矩阵的每一行都是[0, 0.1, 0.2,...,1]
% y矩阵的每一列都是[0, 0.1, 0.2,...,1]
% 这样,(x(i,j), y(i,j))就给出了网格上第i行第j列点的坐标
[x, y] = meshgrid(0:0.1:1, 0:0.1:1);
u = x;
v = -y;
startx = 0.1:0.1:0.9;
starty = ones(size(startx)); %1*9的矩阵
figure;
%该函数使用箭头来直观的显示矢量场
% 该调用格式表示在(x, y)指定的位置绘制
%小箭头来表示以该点为起点的向量(u,v)
quiver(x, y, u, v);%绘制箭头
streamline(x, y, u, v, startx, starty);%绘制曲线
8.三维曲线图
%三维曲线图
figure;
t=0:pi/20:10*pi;
xt=sin(t);
yt=cos(t);
plot3(xt, yt, t, '-o', 'Color', 'b', 'MarkerSize', 10);
figure;
x = -20:10:20;
y = 0:100;
% 随便生成的 5 组数据,也就是目标图上的 5 条曲线数据
z = zeros(5, 101);
%1.0000,1.9000,2.8000,3.7000,4.6000,5.5000,6.4000,7.3000,8.2000,9.1000,10.0000
%d=(10-1)/(11-1)=0.9
z(1,1:10:end) = linspace(1, 10, 11);
z(2,1:10:end) = linspace(1, 20, 11);
z(3,1:10:end) = linspace(1, 5, 11);
z(4,5:10:end) = linspace(1, 10, 10);
z(5,80:2:end) = linspace(1, 5, 11);
for i = 1:5
% x 方向每条曲线都是一个值,重复 y 的长度这么多次
xx = x(i)*ones(1, 101);
% z 方向的值,每次取一条
zz = z(i, :);
% plot3 在 xyz 空间绘制曲线,保证 x y z 长度一致即可
plot3(xx, y, zz, 'LineWidth', 2);
hold on
end
hold off
legend('line1', 'line2', 'line3', 'line4', 'line5');
9.三维散点图
sphere函数
[X,Y,Z] = sphere(n)
n
:一个正整数,指定了生成球体的面数。默认情况下,如果不指定n
,则sphere
函数会生成一个由 20x20 个面组成的单位球体。如果指定了n
,则球体由 n×n 个面(或更准确地说是 n×n 个顶点构成的网格)组成。X
、Y
、Z
:这三个输出矩阵包含了球体表面顶点的 x、y、z 坐标。
numel函数
numel(X)
numel:统计对象X元素总数
- x是标量,结果为1
- x是向量,结果对于向量的长度
- x为矩阵,结果对于矩阵的行数*列数
repmat函数
B = repmat(A,m,n)
repmat:用于重复数组
A
:要被重复的原始数组。m
:指定数组A
在行方向上被重复的次数。n
:指定数组A
在列方向上被重复的次数。B
:是输出数组,它包含了按照指定次数重复A
的结果。
scatter3函数
h = scatter3(X,Y,Z,S,C)
X
,Y
,Z
:分别代表数据点在三维空间中的 x、y 和 z 坐标。S
:一个与数据点相对应的尺寸数组,用于指定每个点的大小。C
:一个与数据点相对应的颜色数组。该数组可以是数值型(用于索引颜色映射表),也可以是 RGB 三元组数组。'filled'
:一个可选参数,用于指定是否填充数据点的标记。'MarkerFaceColor'
,'MarkerEdgeColor'
,'MarkerSize'
:这些属性允许你分别设置标记的填充颜色、边缘颜色和尺寸。h
:返回创建的散点图对象的句柄,便于后续对图表进行修改。
%绘制三维散点图
figure;
[X,Y,Z] = sphere(16);%生成球体坐标
x = [0.5*X(:); 0.75*X(:); X(:)];%X(:)按列把矩阵展成一个向量
y = [0.5*Y(:); 0.75*Y(:); Y(:)];
z = [0.5*Z(:); 0.75*Z(:); Z(:)];
S = repmat([70, 50, 20],numel(X), 1);
C = repmat([1, 2, 3], numel(X), 1);
s = S(:);%指定标记大小
c = C(:);%指定颜色
h = scatter3(x,y,z,s,c);
h.MarkerFaceColor = [0 0.5 0.5];
x = linspace(1, 200, 100);
y1 = log(x) + 1;
y2 = log(x) + 2;
y3 = y1 + rand(1, 100) - 0.5;
figure;
scatter3(x, y2, y3, x, x, 'filled');
10.热图
rand函数
X = rand
返回从区间 (0,1) 的均匀分布中得到的随机标量。
X = rand(n)
返回一个由均匀分布的随机数组成的n
×n
矩阵(值全部介于0-1)X=rand(m,n)返回一个由均匀分布的随机数组成的m*n的矩阵(值全部介于0-1)
生成位于其他区间的均匀随机数
%生成一个由区间 (-5,5) 内均匀分布的数字组成的 10×1 列向量
%rand(10,1)产生的数字全部位于(0,1),乘以10,位于(0,10),加-5位于(-5,5)
r=-5 + 10*rand(10,1);
randi函数
X = randi(imax)
返回一个介于1
和imax
之间的伪随机整数标量。X = randi(imax,n)
返回n
×n
矩阵,其中包含从区间 [1
,imax
] 的均匀离散分布中得到的伪随机整数。X = randi(imax,sz1,...,szN)
返回sz1
×...×szN
数组,其中sz1,...,szN
指示每个维度的大小。例如,randi(10,3,4)
返回一个由介于 1 和 10 之间的伪随机整数组成的 3×4 数组。X = randi(___,typename)
返回一个由数据类型为typename
的介于1
和imax
之间的伪随机整数组成的数组。typename
输入可以是"single"
、"double"
、"int8"
、"uint8"
、"int16"
、"uint16"
、"int32"
、"uint32"
或"logical"
。X = randi([imin,imax],___)
使用以上任何语法返回一个数组,其中包含从区间 [imin
,imax
] 的均匀离散分布中得到的整数。
%10.热图
z = rand(50);
z(z >= 0.0 & z < 0.6) = 0.5;
z(z >= 0.6 & z < 0.8) = 0.7;
z(z >= 0.8 & z <= 1) = 0.9;
for i = 1:30
z(randi(50, 1, 1) : end, i) = nan;
end
for i = 31:50
z(30 + randi(20, 1, 1) : end, i) = nan;
end
z(20:25, 40:45) = nan;
figure;
ax = pcolor(z);
ax.EdgeColor = [1 1 1];
z = rand(10, 10);
% 绘制热图
heatmap(z);
% 自定义热图
colormap("hot"); % 设置颜色映射为'hot'
xlabel('X轴标签'); % 设置X轴标签
ylabel('Y轴标签'); % 设置Y轴标签
title('示例热图'); % 设置标题
% colorbar;%显示颜色柱
z(isnan(z)) = min(z(:)); % 这将替换所有NaN值为z中的最小值