绘图软件学习

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)
步长:     d=\frac{x_{2}-x_{1}}{n-1}     

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 个顶点构成的网格)组成。
  • XYZ:这三个输出矩阵包含了球体表面顶点的 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)
  • XYZ:分别代表数据点在三维空间中的 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中的最小值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值