MATLAB学习(五):进阶绘图

MATLAB学习(五):进阶绘图

加油!
在这里插入图片描述
在这里插入图片描述

二维图表


对数坐标系图像

  • logspace:生成对数间距向量
    y = logspace(a,b) 生成一个由在 10^a 和 10^b(10 的 N 次幂)之间的 50 个对数间距点组成的行向量 y。logspace 函数对于创建频率向量特别有用。该函数是 linspace 和“:”运算符的对数等价函数。
    示例
    y = logspace(a,b,n) 在 10 的幂 10^a 和 10^b(10 的 N 次幂)之间生成 n 个点。
    y = logspace(a,pi) 在 10^a 和 pi 之间生成点,这对于在区间 [10^a,pi] 中创建对数间距频率的数字信号处理很有用。

`

  • plot(x,y):使用线性坐标系画图
  • semilogx(x,y);x轴取对数坐标,y轴取线性坐标
  • semilogy(x,y);y轴取对数坐标,x轴取线性坐标
  • loglog(x,y)x轴和y轴都取对数坐标
  • grid on打开网格
    set(gca, ‘XGrid’,‘on’)是只加x轴的网格
  • 加了网格后就能清晰感受到图像的差异,画有关log的图时要记得加网格
x=logspace(-1,1,100);
y=x.^2;
subplot(2,2,1);
plot(x,y);
title('plot');
grid on;
subplot(2,2,2);
semilogx(x,y);
title('semilogx');
grid on;
subplot(2,2,3);
semilogy(x,y);
title('semilogy');
grid on;
subplot(2,2,4);
loglog(x,y);
title('loglog');
grid on;

在这里插入图片描述

极坐标图像polar chart

  • polar极坐标系
  • theta角度
  • ones(m,n)产生一个m*n的元素全为1的矩阵
    在这里插入图片描述

双y轴图像

  • Plotyy() 带有两套y坐标轴的线性坐标系
  • set(get(AX(1),‘Ylabel’),‘string’,‘Left Y-axis’)表示改变y坐标轴
x=0:0.01:20;
y1=200*exp(-0.05*x).*sin(x);
y2=0.8*exp(-0.5*x).*sin(10*x);
[AX,H1,H2]=plotyy(x,y1,x,y2);
set(get(AX(1),'Ylabel'),'string','Left Y-axis')
set(get(AX(2),'Ylabel'),'string','Right Y-axis')
title('Labeling plotyy');
set(H1,'LineStyle','--');set(H2,'LineStyle',':');

在这里插入图片描述

直方图hist

  • randn(1,1000):产生1000个随机数
  • hist(y,n)绘制有n个矩形的直方图
  • hist看整体分布情况,即变量的频率分布
y=randn(1,1000);
subplot(2,1,1);
hist(y,10);
title('bins=10');
subplot(2,1,2);
hist(y,50);
title('bins=50');

在这里插入图片描述

柱状图bar

  • bar()绘制2维柱状图
  • bar3()绘制3维柱状图
  • bar主要看分量的量的统计结果
x=[1 2 5 4 8];y=[x;1:5];
subplot(1,3,1);bar(x);title('a bargraph of vector x');
subplot(1,3,2);bar(y);title('a bargraph of vector y');
subplot(1,3,3);bar3(y);title('a  3d bargraph ');

在这里插入图片描述

  • 将bar(y)改为bar(y,‘stacked’)可以绘制纵向排列的条形图
  • 将bar(y)改为barh(y)可以绘制堆积排列的条形图
x=[1 2 5 4 8];y=[x;1:5];
subplot(2,1,1);bar(y,'stacked');title('stacked');
subplot(2,1,2);barh(y);title('horizontal');

在这里插入图片描述

饼状图pie

  • pie()用来画饼状图
  • 若向pie中传入一个布尔向量,则会使饼状图裂开,其中0是合并,1是裂开
  • pie3()表示画3维饼状图
a=[10,5,20,30];
subplot(2,2,1);pie(a);
subplot(2,2,2);pie(a,[0,0,0,1]);
subplot(2,2,3);pie3(a,[0,0,0,1]);
subplot(2,2,4);pie3(a,[1,1,1,1]);

在这里插入图片描述

阶梯图stairs和茎线图stem

  • stairs()绘制阶梯图
  • stem()绘制茎线图
x=linspace(0,4*pi,40);y=sin(x);
subplot(1,2,1);stairs(y);
subplot(1,2,2);stem(y);

在这里插入图片描述

  • 将茎线图与普通图像相结合
clear
t=linspace(0,10,50);%在010之间(包括)等距取了50个数
s=linspace(0,10,1000);%1000只是为了图像更平滑而取的
y1=sin(pi*t.^2/4);
y2=sin(pi*s.^2/4);
hold on
plot(s,y2);
stem(t,y1);
hold off

在这里插入图片描述

盒型图boxplot

  • boxplot()这个需要导入文件,所以是截的别人的图
load carsmall
boxplot(MPG, Origin);

在这里插入图片描述

置信区间图(误差的上下限)

  • errorbar(x,y,e):e可以是标准差也可以是方差的置信区间,下图代码用的是标准差置信区间
x=0:pi/10:pi;y=sin(x);
e=std(y)*ones(size(x));
errorbar(x,y,e);

在这里插入图片描述

填充图像

  • fill()画出函数图像并且将其填满
  • 当要画多边形时,派除以几就画几边形
  • axis square off:将当前坐标轴系图形设置为方形,横轴及纵轴比为1:1,且关闭所有坐标轴线、刻度标记和标签
t=(1:2:15)'*pi/8;%将【135……】转置成列向量(这样计算更快),然后×8派
x=sin(t);y=cos(t);
fill(x,y,'r');
axis square off;
text(0,0,'stop','Color','w','FontSize',80,'FontWeight','bold','HorizontalAlignment','center');

在这里插入图片描述

三维图象


三维与二维相互转化

  • 在MATLAB中,所有的图都是三维图,二维图只不过是三维图的一个投影.点击图形窗口的**Rotate 3D(三维旋转)**按钮,即可通过鼠标拖拽查看该图形的三维视图.
    在这里插入图片描述

  • imagesc():将三维图转换为二维俯视图,通过点的颜色指示高度.

  • surf():绘制曲面图
    surf(X,Y,Z) 创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。函数还对颜色数据使用 Z,因此颜色与高度成比例。
    此外,surf(X,Y,Z,C) 还指定曲面的颜色。

  • **meshgrid()**二维和三维网络
    [X,Y] = meshgrid(x,y) 基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。
    [X,Y] = meshgrid(x) 与 [X,Y] = meshgrid(x,x) 相同,并返回网格大小为 length(x)×length(x) 的方形网格坐标。
    [X,Y,Z] = meshgrid(x,y,z) 返回由向量 x、y 和 z 定义的三维网格坐标。X、Y 和 Z 表示的网格的大小为 length(y)×length(x)×length(z)。
    [X,Y,Z] = meshgrid(x) 与 [X,Y,Z] = meshgrid(x,x,x) 相同,并返回网格大小为 length(x)×length(x)×length(x) 的三维网格坐标。

[x, y] = meshgrid(-3:.2:3,-3:.2:3); z = x.^2 + x.*y + y.^2; 
subplot(1, 2, 1)
surf(x, y, z); 
subplot(1, 2, 2)
imagesc(z);

在这里插入图片描述

  • 使用colorbar命令可以在生成的二维图上增加颜色与高度间对应关系的图例,使用colormap命令可以改变配色方案
    在这里插入图片描述

绘制三维线

-使用plot3()函数即可绘制三维线,输入应为三个向量.

x=0:0.1:3*pi; z1=sin(x); z2=sin(2.*x); z3=sin(3.*x);
y1=zeros(size(x)); y3=ones(size(x)); y2=y3./2;
plot3(x,y1,z1,'r',x,y2,z2,'b',x,y3,z3,'g'); grid on;
xlabel('x-axis'); ylabel('y-axis'); zlabel('z-axis');

在这里插入图片描述

绘制三维面

  • 使用mesh()和surf()命令可以绘制三维面,前者不会填充网格而后者会
x = -3.5:0.2:3.5; y = -3.5:0.2:3.5;
[X,Y] = meshgrid(x,y);
Z = X.*exp(-X.^2-Y.^2);
subplot(1,2,1); mesh(X,Y,Z);
subplot(1,2,2); surf(X,Y,Z);

在这里插入图片描述

绘制三维图的等高线

  • 使用contour()和contourf()函数可以绘制三维图形的等高线,前者不会填充网格而后者会.
  • contour(Z,[-.45:.05:.45]):画出的等高线按照[-.45:.05:.45]排列
  • clabel(C,h)标出等高线数值
x = -3.5:0.2:3.5; y = -3.5:0.2:3.5;
[X,Y] = meshgrid(x,y); Z = X.*exp(-X.^2-Y.^2);
subplot(2,2,1);mesh(X,Y,Z);axis square;
subplot(2,2,2); contour(Z,[-.45:.05:.45]); axis square;
subplot(2,2,3); [C,h] = contour(Z); clabel(C,h); axis square;
subplot(2,2,4); contourf(Z); axis square;

在这里插入图片描述

  • 使用meshc()和surfc()函数可以在绘制三维图形时绘制其等高线.
x = -3.5:0.2:3.5; y = -3.5:0.2:3.5;
[X,Y] = meshgrid(x,y); Z = X.*exp(-X.^2-Y.^2);
subplot(1,2,1); meshc(X,Y,Z);
subplot(1,2,2); surfc(X,Y,Z);

在这里插入图片描述

绘制三维多边形

  • patch()创建一个或多个填充多边形
v = [0 0 0; 1 0 0 ; 1 1 0; 0 1 0; 0.25 0.25 1; 0.75 0.25 1; 0.75 0.75 1; 0.25 0.75 1];
f = [1 2 3 4; 5 6 7 8; 1 2 6 5; 2 3 7 6; 3 4 8 7; 4 1 5 8];
subplot(1,2,1); 
patch('Vertices', v, 'Faces', f, 'FaceVertexCData', hsv(6), 'FaceColor', 'flat');
view(3); axis square tight; grid on;
subplot(1,2,2); 
patch('Vertices', v, 'Faces', f, 'FaceVertexCData', hsv(8), 'FaceColor','interp');
view(3); axis square tight; grid on

在这里插入图片描述

调整图像的视角与光线

  • view():调整视角
  • light():设置光线
  • 在想要修改光线时,一定要用set(),若是直接用light(),则会另设一个光源

在这里插入图片描述
在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页