飞道的博客

Matlab(6)进阶绘图

328人阅读  评论(0)

一、Special Plots

1. Logarithm Plots(对数)

  • logspace()
    logspace(X1, X2) generates a row vector of 50 logarithmically
    equally spaced points between decades 10X1 and 10X2.
    If X2 is pi, then the points are between 10X1 and pi.

    也就是在10X1 and 10X2之间生成50个等距离点

    logspace(X1, X2, N) generates N points.

    For N = 1, logspace returns 10^X2.

  • semilogx Semi-log scale plot.

    semilogx(…) is the same as PLOT(…), except a
    logarithmic (base 10) scale is used for the X-axis.

    x轴是以10为基数的对数刻度 y轴还是线性刻度

  • semilogy 同理

  • loglog就是x与y都取对数刻度

Example

>> x = logspace(-1,1,100);
y = x.^2;
subplot(2,2,1);
plot(x,y);
title('Plot');
subplot(2,2,2);
semilogx(x,y);
title('Semilogx');
subplot(2,2,3);
semilogy(x,y);
title('Semilogy');
subplot(2,2,4);
loglog(x, y);
title('Loglog'); 


还可以通过

set(gca,‘XGrid’,‘on’)打开x轴网格
如果想对subplot的某一个进行操作时
只需要先运行subplot(n,n,m);就会选择第m个

2. plotyy()(双y坐标)

[AH,H1,H2]=plotyy(x,y1,x,y2):
返回AX中创建的两个坐标轴的句柄以及H1和H2中每个图形绘图对象的句柄。

句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量

AX(1)为左侧轴,AX(2)为右侧轴。
Example

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')
% 获取左侧轴的label并修改
set(get(AX(2),'Ylabel'),'String','Right Y-axis')
% 获取右侧轴的label并修改
title('Labeling plotyy');
set(H1,'LineStyle','--'); 
% 修改左侧轴的style
set(H2,'LineStyle',':');
% 修改左侧轴的style

3. Histogram(柱状图)

  • R = randn(N)
    returns an N-by-N matrix containing pseudorandom values drawn
    from the standard normal distribution. (符合标准正态分布的伪随机值)
  • randn(M,N) or randn([M,N]) returns an M-by-N matrix.

Example

>> y = randn(1,1000);
% 生成1000个符合标准正态分布的伪随机值
subplot(2,1,1);
hist(y,10);
% 将向量 y等分到 nbins个等间隔范围内,并返回每个范围内元素的个数
title('Bins = 10');
subplot(2,1,2);
hist(y,50);
title('Bins = 50');

4. Bar Charts(条状图)

x = [1 2 5 4 8]; y = [x;1:5];
% 这里y其实是一个2*5的矩阵:[1 2 5 4 8;1 2 3 4 5]
subplot(1,3,1); bar(x); title('A bargraph of vector x');
% 以x绘制条状图
subplot(1,3,2); bar(y); title('A bargraph of vector y');
% 以y绘制条状图,会有两组
subplot(1,3,3); bar3(y); title('A 3D bargraph');
% 3D显示,将不同的组并行显示

5. Pie Charts

a = [10 5 20 30];
% a中的数据被看作频数,饼图中的比例:x[i]/sum(x)% 当 x 中所有元素的元素和 sum(x) < 1 时,图形不是一个整饼
subplot(1,3,1); pie(a);
subplot(1,3,2); pie(a, [0,0,0,1]);
% 数组中如果是0就是合在一起,如果是1就会与其他的分开
subplot(1,3,3); pie3(a, [0,0,0,1]);
% 立体

6. Stacked and Horizontal Bar Charts

x = [1 2 5 4 8];
y = [x;1:5];
subplot(1,2,1);
bar(y,'stacked');
% 用堆的形式显示bar
title('Stacked');
subplot(1,2,2);
barh(y);
% 用Horizontal(水平)显示
title('Horizontal');

7. Polar Chart(极坐标图)

  • polar(theta,r);
    其中theta是用弧度制表示的角度,r对应半径

  • linspace(X1, X2) generates a row vector of 100 linearly
    equally spaced points between X1 and X2.

    linspace(X1, X2, N) generates N points between X1 and X2.
    For N = 1, linspace returns X2.

x = 1:100; theta = x/10; r = log10(x);
subplot(1,4,1); polar(theta,r);

theta = linspace(0, 2*pi); r = cos(4*theta);
subplot(1,4,2); polar(theta, r);

theta = linspace(0, 2*pi, 6); r = ones(1,length(theta));
% theta是02pi的六个等分点,02pi重合。
% r是1*6的全1矩阵
subplot(1,4,3); polar(theta,r);

theta = linspace(0, 2*pi); r = 1-sin(theta);
subplot(1,4,4); polar(theta , r);

8. Stairs and Stem Charts(阶梯图和针状图)

1、stem(Y)
该句法表示绘制数据序列Y。在绘制时,Y的数据是根据等距离的并且自动生成的x轴数据扩展而来的。如果Y是一个矩阵,该句法表示每一行的x值是相同的,每一列的x值间隔是等距的。
2、stem(X,Y)
该句法表示画X与Y的火柴杆的图形。X和Y必须是长度相同的向量或者矩阵。另外,X可以是一行或一列向量,Y的是一个length(X)行的矩阵。

9. Boxplot and Error Bar(箱线图和误差线)

二、Color

1. fill(X,Y,C)

此 MATLAB 函数 根据 X 和 Y 中的数据创建填充的多边形(顶点颜色由 C 指定)。
若(x1,y2),(x2,y2)…不封闭,则matlab自动闭合起点和终点
Example1

t =(1:2:15)*pi/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')
% 给八边形加上文字STOP并设置一些属性


Example2

t =(1:4)*pi/2; x = sin(t); y = cos(t);
fill(x,y,'y','EdgeColor','k','LineWidth',5); axis square off;
% 画一个矩形,设置边缘线颜色以及宽度
text(0,0,'WAIT','Color', 'k','FontSize', 50, ...
'FontWeight','bold','HorizontalAlignment', 'center')
% 给八边形加上文字WAIT并设置一些属性

2. Color space

[R G B]
(红绿蓝)
每一位的范围是0~255,用十六进制表示就是0~FF,所以一共是用六位来表示颜色,如红色就是[255 0 0 ]转化为十六进制#FF0000

Example

G = [46 38 29 24 13]; S = [29 27 17 26 8];
B = [29 23 19 32 7]; 
h = bar(1:5, [G' S' B']);
% 这里用了转置,为的是让[G' S' B']的结果的每一行都是一个国家的金银铜牌数目
title('Medal count for top 5 countries in 2012 Olympics');
ylabel('Number of medals'); xlabel('Country');
legend('Gold', 'Silver', 'Bronze');
set(gca,'XTickLabel',{
   'USA','CHN','GBR','RUS','KOR'});
h(1).FaceColor='#FFFF00';
h(2).FaceColor='#CCCCCC';
h(3).FaceColor='#663300';
% 修改颜色

3. Visualizing Data ad An Image: imagesc()

[x, y] = meshgrid(-3:.2:3,-3:.2:3);
% [x,y]=meshgrid(x,y) 基于向量 x 和 y 中包含的坐标返回二维网格坐标。
z = x.^2 + x.*y + y.^2; 
surf( x, y, z); 
%MATLAB 函数 创建一个三维曲面图,它是一个具有实色边和实色面的三维曲面。
% 该函数将矩阵 Z 中的值绘制为由 XY 定义的 x-y平面中的网格上方的高度。
% 曲面的颜色根据 Z 指定的高度而变化。
box on;
% 在坐标区周围显示框轮廓。
set(gca,'FontSize', 16); zlabel('z');
xlim([-4 4]); xlabel('x'); ylim([-4 4]); ylabel('y');


imagesc(z);
% 函数imagesc(C)将数组 C 中的数据显示为一个图像,该图像使用颜色图中的全部颜色。
% C 的每个元素指定图像的一个像素的颜色。生成的图像是一个 m×n 像素网格,
% 其中 m 和 n 分别是 C 中的行数和列数。这些元素的行索引和列索引确定了对应像素的中心
axis square;
xlabel('x'); ylabel('y');

4. Color Bar and Scheme

colorbar;
直接跟在最后面即可

colormap(hot/cool/grey)
修改色系为热系/冷系/灰系


我们来看这个colormap实际上就是一个256*3的矩阵

所以可以通过以下语句建立一个Green的colormap

x=linspace(0,1,256)
green=[zeros(length(x),1),x',zeros(length(x),1)];
%green的第一列和第三列都是0,只有第二列在变

三、3D plots

1. 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;
%y1全0,y3全1,y2全1/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');

2. More 3D Line Plots

3. Principles for 3D Surface Plots

为了画出面,而不单单是线,此时x与y不是一维数组,而是二维数组,且x每一列是同一个值,y的每一行是同一个值,也就是当x固定时,y会变,y固定时,x会变。这样,x与y组成。z同样也是二维数组。
而meshgrid()就可以用一维数组生成这种二维数组,如:

x = -2:1:2;
y = -2:1:2;
[X,Y] = meshgrid(x,y)

4. mesh&surf

  • mesh:网格
  • 除了网格上面还会填充
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);

5. contour(等高线)

创建一个包含矩阵 Z 的等值线的等高线图,其中 Z 包含 x-y 平面上的高度值。
MATLAB 会自动选择要显示的等高线。Z的列和行索引分别是平面中的 x 和 y 坐标。

Example

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);
axis square;
subplot(1,2,2);
contour(X,Y,Z);
axis square;

6. Various Contour Plots

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,3,1); 
contour(Z,[-.45:.05:.45]);
% 给等高线设定密度,.45就是0.45
axis square;
subplot(1,3,2);
[C,h] = contour(Z);clabel(C,h);
% C:标记矩阵、h:等高线句柄
% 将等高线的刻度标注上去
axis square;
subplot(1,3,3); 
contourf(Z); 
% f指的是fill
axis square;

7. meshc&surfc

就是在mesh&surf下再画contour

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);

8. View Angle:view()

为当前坐标区设置照相机视线的方位角和仰角。

9. Light:light()

打光
L1=light(‘Position’,[x,y,z]);
修改
set(L1,‘Position’,[x,y,z]);
Example


sphere(50); 
% sphere - 生成球面
shading flat;
% 设置颜色着色属性
% shading flat 每个网格线段和面具有恒定颜色,该颜色由该线段的端点或该面的角边处具有最小索引的颜色值确定。
% shading faceted 具有叠加的黑色网格线的单一着色。这是默认的着色模式。
% shading interp 通过在每个线条或面中对颜色图索引或真彩色值进行插值来改变该线条或面中的颜色。
light('Position',[1 3 2]);
light('Position',[-3 -1 3]);
material shiny;
% material - 控制曲面和补片的反射属性。
axis vis3d off;
% 关掉三维坐标系
colormap(jet)
view(-10,60)

10. patch()

画polygons(多边形)


转载:https://blog.csdn.net/weixin_45941945/article/details/116176486
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场