基于Matlab的数据可视化
一、二维图形的绘制
(一)基本图形函数
(1)plot函数
通过线段(折线)来连接给定的点与点
的图像
- plot(X,Y):创建Y中数据对X中对应值的二维线图
- 要绘制 由线段连接的 一组坐标 -> 将 X 和 Y 指定为 相同长度 的向量
- 要在 同一组坐标区上 绘制 多组坐标 -> 将 X 或 Y 中的至少一个指定为 矩阵
% 1
x = 1:9;
y = 2:10;
plot(x,y);
% 2
x = 1:9;
y = x.^2;
plot(x,y);
% 3
x = 1:9;
y = 2:10;
plot(x);
% 4
x = 1:9;
y = 0.1:0.2:1.7;
X = x+y*i;
plot(X);
% 5
t = 0:0.01:2*pi; % 步长越小,对应的曲线就平滑
t = t.'; % 转置:将 行向量 转变为 列向量
% 画出来曲线的条数 == 矩阵的列数
x = [t,t,t];
y = [sin(t),sin(2*t),sin(0.5*t)];
plot(x,y);
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
- plot(X,Y,LineSpec):使用指定的线型、标记和颜色创建绘图
plot(X1,Y1,…,Xn,Yn):在同一组坐标区上绘制多对x和y坐标。此语法可替代将坐标指定为矩阵的形式
x1 = linspace(0,2*pi,10);
x2 = linspace(0,2*pi,20);
x3 = linspace(0,2*pi,200);
y1 = sin(x1);
y2 = sin(x2)+2;
y3 = sin(x3)+4;
plot(x1,y1,x2,y2,x3,y3);
3. plot(X1,Y1,LineSpec1,…,Xn,Yn,LineSpecn)
x1 = linspace(0,2*pi,10);
x2 = linspace(0,2*pi,20);
x3 = linspace(0,2*pi,200);
y1 = sin(x1);
y2 = sin(x2)+2;
y3 = sin(x3)+4;
plot(x1,y1,':g',x2,y2,x3,y3); % : 虚线 g 绿色
(2)fplot函数
% 1
fplot(@(x)sin(1./x),[0,0.2]);
% 2
x = [0:0.005:0.2];
y = sin(1./x);
plot(x,y);
% 3
fplot(@(t)t*sin(t),@(t)t*cos(t),[0,10*pi],'-r');
序号 | 图像 |
---|---|
1 | |
2 | |
3 | |
(3)其他坐标系的二维曲线
- 对数坐标图:semilogx( )
x = logspace(-1,2); %生成从0到100的对数间距
y = x;
semilogx(x,y);
- 极坐标图:polarplot( )
theta = 0:0.01:2*pi;
rho = sin(theta) .* cos(theta);
polarplot(theta,rho);
- 统计图
条形图:bar( )
x = [2021,2022,2023];
y = [10,20;20,30;100,200]; % 对应年份两项指标的打分
bar(x,y);
直方图(质量分布图):histogram( )
% 自动分 bin 算法 (将连续变量离散化处理)
x = randn(1000,1);
nbins = 25;
h = histogram(x,nbins);
counts = h.Values % 每个 bin 中直方图的计数
面积类图:pie( )
x = [1:2:9];
pie(x);
散点类图:scatter( )
t = 0:pi/50:2*pi;
x = 16*sin(t) .^ 3;
y = 13*cos(t) - 5*cos(2*t) -2*cos(3*t) - cos(4*t);
scatter(x,y,'red',"filled");
s矢量图:quiver( )
% quiver(X,Y,U,V)在由X和Y指定的笛卡尔坐标上绘制具有定向分量U和V的箭头
% 即起点(X,Y)->终点(U,V)
A = [4,5];
quiver(0,0,A(1),A(2));
A = [4,5]
B = [-10,10]
C = A + B
hold on
quiver(0,0,A(1),A(2))
quiver(0,0,B(1),B(2))
quiver(0,0,C(1),C(2))
title('A向量+B向量的结果')
xlabel('X')
ylabel('Y')
text(A(1),A(2),'A')
text(B(1),B(2),'B')
text(C(1),C(2),'C')
grid on
(二)图形属性设置
(1)线型、标记、颜色
(2)图形标注(支持LaTex中公式、符号的输入)
- title(图形标题)
- xlabel(x轴说明)
- ylabel(y轴说明)
- text(x,y,图形说明)
- legend(图例1,图例2)
(3)坐标控制
- axis( )
- 给坐标系加网格和边框
x = linspace(0,2*pi,200);
y = [sin(x);sin(2*x);sin(0.5*x)];
plot(x,y);
axis([0,6.5,-1.5,1.5]);
title('三个正弦函数曲线y=sin{\theta}','FontSize',24);
xlabel('X');
ylabel('Y');
text(2.5,sin(2.5),'sin(x)');
text(2.5,sin(2*2.5),'sin(2x)');
legend('sin(x)','sin(2x)','sin(0.5x)')
- 图形保持
t = linspace(0,2*pi,200);
x = sin(t);
y = cos(t);
plot(x,y,'b');
axis equal
hold on
x1 = 2*sin(t);
y1 = 2*cos(t);
plot(x1,y1,'r');
二、三维图形的绘制
(一)三维曲线
(1)plot3( )
t = [0:0.1:10*pi];
x = sin(t) + t .* cos(t);
y = cos(t) - t .* sin(t);
z = t;
plot3(x,y,z);
% 1 sin(x)的三维图
y = t;
plot3(t,y,sin(t));
% 2
t = [0:0.1:10*pi];
t = t.';
x = [t,t,t];
y = [sin(t),sin(t)+2,sin(t)+4];
z = t;
plot3(x,y,z);
% 3 x 与 y 中有的是向量,有的是矩阵
t = [0:0.1:10*pi];
x = t;
y = [sin(t);sin(t)+2;sin(t)+4];
z = t;
plot3(x,y,z);
% 4
t = [0:0.1:10*pi];
plot3(x,sin(t),z,x,sin(t)+2,z,x,sin(t)+4,z);
序号 | 图像 |
---|---|
1 | |
2 | |
3 | |
4 | |
(2)fplot3( )
t = [0:0.1:10*pi];
x = @(t) exp(-t/10) .* sin(5*t);
y = @(t) exp(-t/10) .* cos(5*t);
z = @(t) t;
fplot3(x,y,z,[-12,12],'r');
(二)三维曲面
(1)平面网格数据的生成
- 利用矩阵运算生成
- 利用meshgrid函数生成
%(1)利用矩阵运算生成
x = [2:6]
y = [3:8]'
X = ones(size(y))*x % 把x拉6行
Y = y*ones(size(x)) % 列在前,行在后
%(2)利用meshgrid函数
x = [2:6]
y = [3:8]'
[X,Y]=meshgrid(x,y)
两个方法结果相同
(2)绘制三维曲面的函数
x = -2:0.2:2;
[X,Y]=meshgrid(x);
Z = X .* exp(-X .^ 2 - Y .^ 2);
% 1
plot3(X,Y,Z);
% 2
mesh(X,Y,Z);
% 3
surf(X,Y,Z);
序号 | 图像 |
---|---|
1 | |
2 | |
3 | |
x = [2:6];
y = [3:8]';
[X,Y] = meshgrid(x,y);
Z = randn(size(X)); % 和X/Y大小一致即可
plot3(X,Y,Z);
三、句柄/窗口的控制
(一)图形对象句柄及属性
(1)对象句柄值的获取
x = 1:10;
y = x .^ 2;
h = plot(x,y); % 将句柄保存到 h 变量中
h1 = text(5,25,'说明');
h1.FontSize = 24; % 更改图窗中字体大小
(2)对象属性的获取/设置
x = linspace(0,2*pi,100);
y = sin(x);
h = plot(x,y);
get(h);
set(h,'Color','red');
(二)图形窗口的分割
x = linspace(0,2*pi,100);
subplot(2,2,1); % 相当于激活函数
plot(x,sin(x));
title('sin(x)');
subplot(2,2,2);
plot(x,cos(x));
title('cos(x)');
subplot(2,2,3);
plot(x,tan(x));
title('tan(x)');
subplot(2,2,4);
plot(x,cot(x));
title('cot(x)');
x = -1:0.2:2;
[X,Y] = meshgrid(x);
Z = X .* exp(-X .^ 2 - Y .^ 2);
subplot(1,3,1);
plot3(X,Y,Z);
subplot(1,3,2);
mesh(X,Y,Z);
subplot(1,3,3);
surf(X,Y,Z);
完