基于Matlab的数据可视化

基于Matlab的数据可视化

一、二维图形的绘制

(一)基本图形函数

(1)plot函数

通过线段(折线)来连接给定的点与点的图像

  1. plot(X,Y):创建Y中数据对X中对应值的二维线图
  • 要绘制 由线段连接的 一组坐标 -> 将 X 和 Y 指定为 相同长度 的向量
  • 要在 同一组坐标区上 绘制 多组坐标 -> 将 X 或 Y 中的至少一个指定为 矩阵
matlab 复制代码
% 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
  1. plot(X,Y,LineSpec):使用指定的线型、标记和颜色创建绘图
    plot(X1,Y1,...,Xn,Yn):在同一组坐标区上绘制多对x和y坐标。此语法可替代将坐标指定为矩阵的形式
matlab 复制代码
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);
  1. plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn)
matlab 复制代码
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函数

matlab 复制代码
% 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)其他坐标系的二维曲线

  1. 对数坐标图:semilogx( )
matlab 复制代码
x = logspace(-1,2); %生成从0到100的对数间距
y = x;
semilogx(x,y);
  1. 极坐标图:polarplot( )
matlab 复制代码
theta = 0:0.01:2*pi;
rho = sin(theta) .* cos(theta);
polarplot(theta,rho);
  1. 统计图
  • 条形图:bar( )
matlab 复制代码
x = [2021,2022,2023];
y = [10,20;20,30;100,200]; % 对应年份两项指标的打分
bar(x,y);
  • 直方图(质量分布图):histogram( )

matlab 复制代码
% 自动分 bin 算法 (将连续变量离散化处理)
x = randn(1000,1);
nbins = 25;
h = histogram(x,nbins);
counts = h.Values % 每个 bin 中直方图的计数


  • 面积类图:pie( )
matlab 复制代码
x = [1:2:9];
pie(x);
  • 散点类图:scatter( )

matlab 复制代码
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( )
matlab 复制代码
% quiver(X,Y,U,V)在由X和Y指定的笛卡尔坐标上绘制具有定向分量U和V的箭头
% 即起点(X,Y)->终点(U,V)
A = [4,5];
quiver(0,0,A(1),A(2));


matlab 复制代码
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中公式、符号的输入)

  1. title(图形标题)
  2. xlabel(x轴说明)
  3. ylabel(y轴说明)
  4. text(x,y,图形说明)
  5. legend(图例1,图例2)

(3)坐标控制

  1. axis( )
  2. 给坐标系加网格和边框

matlab 复制代码
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)')
  1. 图形保持
matlab 复制代码
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( )


matlab 复制代码
t = [0:0.1:10*pi];
x = sin(t) + t .* cos(t);
y = cos(t) - t .* sin(t);
z = t;
plot3(x,y,z);
matlab 复制代码
% 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( )


matlab 复制代码
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)平面网格数据的生成

  1. 利用矩阵运算生成
  2. 利用meshgrid函数生成
matlab 复制代码
%(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)绘制三维曲面的函数

matlab 复制代码
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
matlab 复制代码
x = [2:6];
y = [3:8]';
[X,Y] = meshgrid(x,y);
Z = randn(size(X)); % 和X/Y大小一致即可
plot3(X,Y,Z);

三、句柄/窗口的控制

(一)图形对象句柄及属性

(1)对象句柄值的获取

matlab 复制代码
x = 1:10;
y = x .^ 2;
h = plot(x,y);  % 将句柄保存到 h 变量中
h1 = text(5,25,'说明');
h1.FontSize = 24; % 更改图窗中字体大小

(2)对象属性的获取/设置


matlab 复制代码
x = linspace(0,2*pi,100);
y = sin(x);
h = plot(x,y);
get(h);
set(h,'Color','red');

(二)图形窗口的分割

matlab 复制代码
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)');
matlab 复制代码
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);

相关推荐
暗黑起源喵几秒前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong5 分钟前
Java反射
java·开发语言·反射
Troc_wangpeng6 分钟前
R language 关于二维平面直角坐标系的制作
开发语言·机器学习
努力的家伙是不讨厌的8 分钟前
解析json导出csv或者直接入库
开发语言·python·json
Envyᥫᩣ22 分钟前
C#语言:从入门到精通
开发语言·c#
童先生43 分钟前
Go 项目中实现类似 Java Shiro 的权限控制中间件?
开发语言·go
lulu_gh_yu44 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
Re.不晚1 小时前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
老秦包你会1 小时前
Qt第三课 ----------容器类控件
开发语言·qt
凤枭香1 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv