matlab学习:高阶绘图

1.各种绘图

1.plotyy()

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); %h1为y1的handle,h2为y2的handle
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',':');

matlab学习:高阶绘图_第1张图片

2.Histogram直方图

%historgram  看整体的情况
y = randn(1,1000);
subplot(2,1,1); 
hist(y,10); %产生10个bins
title('Bins = 10'); 
subplot(2,1,2);
hist(y,50); 
title('Bins = 50');

matlab学习:高阶绘图_第2张图片

3.Bar Charts

%Bar Charts 适合看单个情况
x = [1 2 5 4 8]; 
y = [x;1:5];
subplot(1,3,1); 
bar(x);  %2D的一维数组
title('A bargraph of vector x'); 
subplot(1,3,2); 
bar(y);%2D的二维矩阵
title('A bargraph of vector y'); 
subplot(1,3,3);
bar3(y); %绘制成三维图像
title('A 3D bargraph');

matlab学习:高阶绘图_第3张图片

4.Stacked and Horizontal Bar Charts

饼图的堆叠和水平化

  • barh():水平化,坐标轴旋转90度,x轴变y轴,y变x轴
  • stack():堆叠
%%
 %barh():水平化,坐标轴旋转90度,x轴变y轴,y变x轴
x = [1 2 5 4 8];  
y = [x;1:5]; 
subplot(1,2,1);  
bar(y,'stacked');  %叠在一起
title('Stacked');
subplot(1,2,2);  
barh(y,'stacked'); % stack the horizontal bar chart
title('Horizontal');

matlab学习:高阶绘图_第4张图片
matlab学习:高阶绘图_第5张图片

5.Pie Charts

%Pie Charts
a = [10 5 20 30];
subplot(1,3,1);  
pie(a); 
subplot(1,3,2);  
pie(a, [0,0,1,1]); %取1对应部分分离,取0对应部分合在一起
subplot(1,3,3);  
pie3(a, [1,1,1,1]);

matlab学习:高阶绘图_第6张图片

7.Polar Chart 极坐标图

polar(theta, r);%theta:旋转角度;r:半径

%Polar Chart
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:旋转角度;r:半径
theta = linspace(0, 2*pi, 6);%0~2pi,分为6个点,即五段
r = ones(1,length(theta)); 
subplot(1,4,3);  
polar(theta,r);
theta = linspace(0, 2*pi);
r = 1-sin(theta); 
subplot(1,4,4); 
polar(theta , r);

matlab学习:高阶绘图_第7张图片

  • 作业:绘制六边形
%作业 六边形
theta = linspace(0, 2*pi, 7);
r = ones(1,length(theta)); 
polar(theta,r);

matlab学习:高阶绘图_第8张图片

7.Stairs and Stem Charts

%Stairs and Stem Charts
x = linspace(0, 4*pi, 40); 
y = sin(x); 
subplot(1,2,1); 
stairs(y); 
subplot(1,2,2);  
stem(y);

matlab学习:高阶绘图_第9张图片

  • 小练习:
    matlab学习:高阶绘图_第10张图片
%作业
x =linspace(0,10); 
y=sin(pi*(x.^2)/4);
hold on
plot(x,y,'b');
stem(x,y,'r');
hold off

matlab学习:高阶绘图_第11张图片

2.绘制几何图片

1.fill():填充

% fill :stop sigin
%t =(1:2:15)'*pi/8;  
t=linspace(0,2*pi,9); 
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学习:高阶绘图_第12张图片

  • 小练习:
%作业
t =linspace(0,2*pi,5); 
x = sin(t);  
y = cos(t); 
fill(x,y,'y'); 
axis square off;
text(0,0,'WAIT','Color', 'k', 'FontSize', 70, ... 
    'FontWeight','bold', 'HorizontalAlignment', 'center');

matlab学习:高阶绘图_第13张图片

3.Color Space

  • 每种颜色都用[R G B]来表示。
  • R、G、B分别用8位来表示(0~255)
    matlab学习:高阶绘图_第14张图片

4. 把矩阵转为图像

  • Visualizing Data as An Image: imagesc()

1.Display values of a matrix as an “image”

  • 使用imagesc()函数可以将三维图转换为二维俯视图,通过点的颜色指示高度.
[x, y] = meshgrid(-3:.2:3,-3:.2:3); 
z = x.^2 + x.*y + y.^2; 
surf( x, y, z);  
box on; 
set(gca,'FontSize', 16); 
zlabel('z'); 
xlim([-4 4]); 
xlabel('x'); 
ylim([-4 4]); 
ylabel('y'); 
figure
imagesc(z);  %把z以色彩图像显示
axis square;  
xlabel('x');  ylabel('y'); 
colorbar;%相当于legend
colormap(hot);%色系图
a = colormap(prism)

matlab学习:高阶绘图_第15张图片

2.Color Bar and Scheme

函数 含义
colorbar 显示图中颜色的图例,相当于legend
colormap(hot) 显示色系图,偏红色,为内置色系

matlab学习:高阶绘图_第16张图片

3.Built-in Colormaps

matlab学习:高阶绘图_第17张图片

  • 小练习
    matlab学习:高阶绘图_第18张图片
x = [1:10; 3:12; 5:14];
imagesc(x); %转化为图像
colorbar;
map = zeros(256,3); %色彩空间全部置为0
map(:,2) = (0:255)/255;%第二列,即G列取值映射为0`1 渐变
 colormap(map);%转化为map

5.3D Plots

  • matlab绘制的曲线都是3D的,可以在图片显示界面进行3D旋转。
    matlab学习:高阶绘图_第19张图片

1. 3D绘图函数功能

函数 含义
plot3 3D曲线
surf 3D曲线的表面图,3D的曲面,会填充
surfc 在surf图下方产生投影
surface 创建一个surface对象
mesh 绘制一个矩阵的点连成的3D曲面,不会填充
meshc 在mesh下方产生投影
contour 绘制等高线
contourf 绘制等高线,并且填充

2. plot3()

  • 我们对一个二维网格矩阵应用函数z = f ( x , y ) 才能得到三维图形,因此在得到三维数据之前我们应当使用meshgrid()函数生成二维网格矩阵.
  • meshgrid()函数将输入的两个向量进行相应的行扩充和列扩充以得到两个增广矩阵,对该矩阵可应用二元函数。
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');

matlab学习:高阶绘图_第20张图片

3.More 3D Line Plots

t = 0:pi/50:10*pi; 
plot3(sin(t),cos(t),t) %?三维曲线
grid on;  
axis square;
turns = 40*pi; 
t = linspace(0,turns,4000); 
x = cos(t).*(turns-t)./turns; 
y = sin(t).*(turns-t)./turns;
z = t./turns;
plot3(x,y,z);
grid on;

matlab学习:高阶绘图_第21张图片

4. 3D Surface Plots

  • [X,Y,Z] = meshgrid(x,y,z) 返回由向量 x、y 和 z 定义的三维网格坐标。
  • X、Y 和 Z 表示的网格的大小为 length(y)×length(x)×length(z)。
  • 使用 meshgrid 去创建给定范围的X和Y矩阵
  • X 变化时,Y不变;Y变化时,X不变。
  • Surface Plots:
    • mesh()
    • surf()
    • 使用mesh()和surf()命令可以绘制三维面,前者不会填充网格而后者会.
      matlab学习:高阶绘图_第22张图片
% [X,Y,Z] = meshgrid(x,y,z) 返回由向量 x、y 和 z 定义的三维网格坐标。
%X、Y 和 Z 表示的网格的大小为 length(y)×length(x)×length(z)。
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); %3维的点连起来
subplot(1,2,2);  
surf(X,Y,Z);%3维的面,填充

matlab学习:高阶绘图_第23张图片

5. contour():3D图像在二维平面上的等高线

%counter 绘制矩阵的等高线
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,1,1);  
mesh(X,Y,Z); %其中 Z 解释为有关 x-y 平面的高度。Z 必须至少是 2×2 矩阵,该矩阵包含至少两个不同值。
%x 值对应于 Z 的列索引,y 值对应于 Z 的行索引。自动选择等高线层级。
axis square; 
subplot(2,1,2); 
contour(X,Y,Z); 
axis square;

matlab学习:高阶绘图_第24张图片

  • Various Contour Plots
    matlab学习:高阶绘图_第25张图片
  • 小练习
    matlab学习:高阶绘图_第26张图片
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]); 
%要在 k 层级绘制等高线,请使用 contour(Z,[k k])。指定向量 v 可将 LevelListMode 属性设置为 manual。
%axis square; 
%subplot(1,3,2); 
%[C,h] = contour(Z); 
%[C,h] = contour(...) 返回等高线矩阵 C(包含定义等高线的数据)和 Contour 对象 h。
%Contour 对象的 ContourMatrix 属性也包含等高线矩阵。
[C,h] = contourf(Z);
clabel(C,h); %clabel 函数使用等高线矩阵标记等高线。
%axis square; 
%subplot(1,3,3); 
%contourf(Z);%填充的二维等高线图
axis square;

matlab学习:高阶绘图_第27张图片

6.meshc() and surfc()

在相应的图像下方产生投影

%meshc() and 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);

matlab学习:高阶绘图_第28张图片

7.View Angle: view()

  • view()视角,包括观察的角度,和俯视/仰视
  • light():光线
%View Angle: view()视角,包括观察的角度,和俯视/仰视
sphere(50); 
shading flat; 
light('Position',[1 3 2]); %光线位置
light('Position',[-3 -1 3]); 
material shiny; 
axis vis3d off; 
set(gcf,'Color',[1 1 1]);
view(-45,20);%观察角度

matlab学习:高阶绘图_第29张图片

8.patch()

  • 创建一个或多个填充多边形
  • patch(‘Faces’,F,‘Vertices’,V) 创建一个或多个多边形,其中 V 指定顶点的值,F 定义要连接的顶点。
  • patch(X,Y,Z,C) 使用 X、Y 和 Z 在三维坐标中创建多边形。C 确定多边形的颜色。通过指定 FaceColor 属性来设置颜色。
  • 要在三维视图中查看这些多边形,请使用 view(3) 命令。
%patch() : A graphical object containing polygons 创建一个或多个填充多边形
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'); %patch('Faces',F,'Vertices',V) 创建一个或多个多边形,其中 V 指定顶点的值,F 定义要连接的顶点。
view(3);  %patch(X,Y,Z,C) 使用 X、Y 和 Z 在三维坐标中创建多边形。要在三维视图中查看这些多边形,请使用 view(3) 命令。C 确定多边形的颜色。
axis square tight; %通过指定 FaceColor 属性来设置颜色。
grid on; 
subplot(1,2,2); 
patch('Vertices', v, 'Faces', f, ... 
    'FaceVertexCData', hsv(8), 'FaceColor', 'interp'); 
view(3);  
axis square tight;  
grid on;

matlab学习:高阶绘图_第30张图片

你可能感兴趣的:(matlab,matlab)