您的位置:首页 > 编程语言 > MATLAB

数据可视化(Matlab)丨绘制绘制二维、三维和四维图形以及图形编辑与函数图形的绘制

2016-01-26 20:43 2401 查看
庞大的数据和复杂的计算过程给用户带来了极大的不便,MATLAB自产生之日起就具有方便的数据可视化功能,新版本中更是

做出了很大的改进和完善,本文基于MATLABR2015b通过实例来展示绘制二维、三维和四维以及图形编辑与函数图形绘制。

1绘制二维图形

plot: x轴和y轴均为线性刻度,plot(x,y)以x轴为红坐标,y轴为纵坐标绘制曲线。
grid:在图形窗口添加网格(grid on)或去掉网格(grid
off)。

【示例
1】下面通过示例来演示绘图步骤

在同一坐标轴上绘制sin(x)、sin(2x)和sin(3x)这三条曲线。

%示例1在同一坐标轴上绘制sin(x)、sin(2x)和sin(3x)这三条曲线
%准备数据
x = 0:0.01:3*pi;  %pi特殊变量,圆周率
y1 = sin(x);
y2 = sin(2*x);
y3 = sin(3*x);
%设置当前绘图区域
figure;
%绘图
plot(x,y1,x,y2,x,y3);
%设置坐标轴和网格属性
axis([0 8 -2 2]);   %axis,坐标轴
grid on;
%标注图形
xlabel('x');
ylabel('y');
title('演示绘图基本步骤');
legend('sin(x)','sin(2x)','sin(3x)')



运行结果如图1所示:



图1 演示绘图基本步骤

【示例
2】用不同线型和颜色在同一坐标内绘制曲线

及其包络线。

%用不同线型和颜色在同一坐标内绘制曲线y及其包络线。
x = (0:pi/100:2*pi)';   %行数据->列数据
y1 = 2 * exp(-0.5*x)*[1,-1];
y2 = 2 * exp(-0.5*x).*sin(2*pi*x);  % '.*'为对应位数值相乘
x1 = (0:12)/2;
y3 = 2 * exp(-0.5*x1).*sin(2*pi*x1);
plot(x,y1,'g:',x,y2,'b--',x1,y3,'rp');
运行结果如图2所示:



图2 二维曲线

polar函数用来绘制极坐标图,其调用格式为:

polar(theta,rho,选项)

其中,theta为极坐标极角,rho为极坐标失径,选项的内容与plot函数相似。

【示例
3】绘制r=sin(x)cos(x)的极坐标图。

t = 0:pi/50:2*pi;
r = sin(t).*cos(t);
polar(t,r,'-*')


运行结果图3所示:



图3 极坐标二维图

【示例
4】其他二维图形画图示例

figure;
subplot(221)
x = -2.9:0.2:2.9;    %条形图
bar(x,exp(-x.^2))
subplot(222)
x = 0:0.1:4;         %针状图
y = (x.^0.8).*exp(-x)
stem(x,y)
subplot(223)
x = 0:0.25:10;       %阶状图
stairs(x,sin(2*x)+sin(x))
subplot(224)
x = [43 78 88 43 21];%饼图
pie(x)


运行结果如图4所示:



图4 其他类型的二维图

面积域area的特点是:以“前”条曲线作为基线,再取值绘制而成。

注意:每个“因素”数据取列向量形式排放。

【示例
5】面域图示例

clf;x = -2:2;   %注意:自变量要单调变化,clf为清除图形命令
Y = [3,5,2,4,1;3,4,5,2,1;5,4,3,2,5]; %各因素的相对贡献份额
%Cum_Sum = cumsum(Y);     %各曲线在图上的绝对坐标
area(x',Y',0);
legend('因素A','因素B','因素C'),grid on,colormap(spring)

运行结果如图5所示:



图5 面域图

【示例
6】填色图示例

X = [0.5 0.5 0.5 0.5;0.5 0.5 0.5 0.5;0 1 1 0];
Y = [0.5 0.5 0.5 0.5;0.5 0.5 0.5 0.5;0 0 1 1];
Z = [1 1 1 1;0 0 0 0;0 0 0 0];
C = [1 0 0 1;0 1 0 1;0 0 1 0];
fill3(X,Y,Z,C),view([-10 55]),colormap cool
xlabel('x'),ylabel('y'),box on;grid on


运行结果如图6所示:



图6 填色图

【示例
7】射线图compass和羽毛图feather示例。

t = -pi/2:pi/12:pi/2;
r = ones(size(t));  %单位半径
[x,y] = pol2cart(t,r);   %极坐标转为直角坐标
subplot(1,2,1),compass(x,y),title('射线图')
subplot(1,2,2),feather(x,y),title('羽毛图')


运行结果如图7所示:



图7 射线图和羽毛图

【示例
8】用Voronoi多边形勾画每个点的最邻近范围。Voronoi多边形在计算机几何、模式识别中有重要应用。

clf;rand('state',111)
n = 30;A = rand(n,1)-0.5;B = rand(n,1)-0.5;  %产生30个随机点
T = delaunay(A,B);                           %求相邻三点组
T = [T T(:,1)];                              %为使三点剖分三角形封闭而采取的措施
voronoi(A,B)                                 %画Voronoi图
hold on;axis square;
fill(A(T(10,:)),B(T(10,:)),'y');             %画一个剖分三角形
voronoi(A,B)                                 %重画Voronoi图,避免线被覆盖


运行结果如图8所示:



图8 多边形图

【示例
9】用彩带绘图命令ribbon示例。

clear,clf
zeta2 = [0.1 0.2 0.3 0.4 0.5 0.6 0.8 1.0];
n = length(zeta2);
for k=1:n
Num{k,1}=1;
Den{k,1}=[1 2*zeta2(k) 1];
end
S = tf(Num,Den);                    %产生单输入多输出系统
t = (0:0.4:30)';                    %时间采样点
[Y,x] = step(S,t);                  %单输入多输出系统的响应
tt = t*ones(size(zeta2));           %为画彩带图,生成为函数值Y维数相同的时间矩阵
ribbon(tt,Y,0.4)                    %画彩带图
%至此彩带图已经生成,以下命令都是为了使图形效果更好、标示更清楚而用。
view([150,50]),shading interp,colormap(jet)    %设置视角、明暗和色图
light,lighting phong,box on         %设置光源、照射模式和坐标框


运行结果如图9所示:



图9 彩带图

【示例
10】本例重点演示所谓“二维半”命令:伪彩图pcolor;等位线命令contour、contourf;等位线标高命令clabel的配合使用和区别。

clf;clear;[X,Y,Z]=peaks(40);    %获得peaks图形数据
n = 4;                          %等高线分级数
subplot(1,2,1),pcolor(X,Y,Z)    %伪彩图
colormap jet,shading interp
hold on,C = contour(X,Y,Z,n,'k:'); %用黑虚线画等位线,并给出标识数据
clabel(C)                       %随机标识法
zmax = max(max(Z));
zmin = min(min(Z));
caxis([zmin,zmax]);
colorbar                        %画垂直色标尺
hold off,subplot(1,2,2)
[C,h,CF] = contourf(X,Y,Z,n,'k:');
clabel(C,h)                     %沿线标识法
运行结果如图10所示:



图10 二维半图

2 绘制三维图形

plot3是基本的绘图命令,它把数学函数用曲线描绘出来。

plot3:绘制三维曲线图形。
stem3:绘制三维枝干图。
axis:设置坐标属性。
grid on:打开坐标网络。
view(方位角,仰俯角):设置视角。

【示例
1】当输入参数是向量(x,y,z)时,plot3(x,y,z)生成曲线。

t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)    %画三维线状图
axis square;              %使各坐标轴的长度相等
grid on
运行结果如图1所示:



图1 三维螺旋线图

mesh:绘制三维网格图。
meshc:绘制带有基本等高线的网格图。
meshz:绘制带有基准平面的网格图。

【示例
2】运用mesh、meshc、meshz绘制三维曲线图。

x = -8:.25:8;
y = x;
[X,Y] = meshgrid(x,y);  %生成网格点坐标
R = sqrt(X.^2+Y.^2)+eps;%定义R
Z = sin(R)./R;          %生成函数Z
subplot(1,3,1);
mesh(Z)                 %画网格图
title('mesh(Z)');
subplot(1,3,2);
meshc(Z)                %画带有基本等高线的网格图
title('meshc(Z)');
subplot(1,3,3);
meshz(Z)                %画带有基准平面的网格图
title('meshz(Z)');
运行结果如图2所示:



图2 三维曲线图

surf:绘制面状图。
surfl:(是L不是1)绘制设定光源方向的面状图。
shading interp和shading flat:把曲面上的小格平滑掉,使光滑。
shading faceted:是默认状态,它使曲面上有小格。
colormap:设定图形的颜色。

pink:粉红色;copper:铜色;gray:灰黑色;hsv:色调-饱和度-亮值彩色图;
cool:蓝绿和洋红阴影彩色图;hot:黑-红-黄-白彩色图。

【示例
3】命令surf和surfl比较。

z = peaks(25);      %定义一个25x25的高斯分布矩阵
subplot(1,2,1)
surf(z);            %画面状图
shading interp;
colormap(hsv);
title('surf(z)');
subplot(1,2,2)
surfl(z)
shading interp;
colormap(hsv);
title('surfl(z)');


运行结果如图3所示:



图3 高斯分布矩阵不带光源方向(左)和带光源方向图(右)

bar3:绘制垂直方向直方图。
bar3h:绘制水平方向直方图。
stem3:绘制三维枝干图。
contour3:绘制等高线图。

【示例
4】绘制直方图、三维枝干图和等高线图。

%绘制三维直方图
y1 = [5 2 1;8 7 3;8 5 6;5 1 5;4 3 2];
subplot(2,2,1)
bar3(y1)     %创建三维垂直方向直方图
subplot(2,2,2)
bar3h(y1)    %创建三维水平方向直方图
%绘制三维枝干图
t = (0:127)/128*2*pi;
x2 = t.*sin(t);
y2 = t.*cos(t);
subplot(2,2,3)
stem3(x2,y2,t,'fill') %画枝干图,并指定点为实心
view([65 30])        %设置视角
%绘制等高线图
[x3,y3,z3] = peaks;    %定义一高斯分布矩阵
subplot(2,2,4)
contour3(x3,y3,z3,30)      %生成30条等高线


运行结果如图4所示:



图4 三维直方图、枝干图和等高线图

【示例
5】绘制瀑布图。[注:waterfall,绘制瀑布图]。

%绘制瀑布图
Z = peaks(65);
waterfall(Z)          %画瀑布图
shading faceted,colormap(copper);  %使曲面有小格,铜色


运行结果如图5所示:



图5 高斯分布矩阵的瀑布图

【示例
6】三维散点图示例。[注:scatter3,绘制三维散点图]。

%三维散点图
x = 3*pi*(-1:0.2:1);
y = x;
[X,Y] = meshgrid(x,y);
R = sqrt(X.^2+Y.^2)+eps;
Z = sin(R)./R;        %引入eps避免0/0
C = abs(del2(Z));     %求“五点格式”差分,反映曲面变化
meshz(X,Y,Z,C)        %由曲面变化决定用色
hold on,scatter3(X(:),Y(:),Z(:),'filled')
hold off,colormap(hot);


运行结果如图6所示:



图6 三维散点图示例

【示例
7】绘制几何解析图形,绘制抛物曲面

,绘制球面



%绘制抛物曲面z
x1 = -4:.25:4;
y1 = x1;
[X1,Y1] = meshgrid(x1,y1);   %生成网格点坐标
Z1 = X1.^2+Y1.^2;
subplot(1,2,1)
mesh(X1,Y1,Z1)
%绘制球面x,y,z
x2 = -1:.2:1;
y2 = x2;
[X2,Y2] = meshgrid(x2,y2);
Z2 = sqrt(4-X2.^2-Y2.^2)+eps;
subplot(1,2,2)
mesh(X2,Y2,Z2)


运行结果如图7所示:



图7 二次抛物曲面与球面图像

3 绘制四维图形

用色图矩阵表现函数的不同特征。演示:当三维网曲线图、曲面图的第四个输入变量取一些特殊矩阵时,色彩就能表现或加强

函数的某特征,如梯度、曲率、方向导数等。

【示例
1】利用slice绘制四维切面图。

clf;[X,Y,Z,V]=flow; %取4个方向的射流数据矩阵,V是射流速度
x1 = min(min(min(X)));%取x坐标上下限
x2 = max(max(max(X)));
y1 = min(min(min(Y)));%取y坐标上下限
y2 = max(max(max(Y)));
z1 = min(min(min(Z)));%取z坐标上下限
z2 = max(max(max(Z)));
sx = linspace(x1+1.2,x2,5);  %确定5个垂直于x轴的切面坐标
sy = 0,sz = 0;               %在y=0,z=0处,取垂直切面
slice(X,Y,Z,V,sx,sy,sz);     %画切面图
view([-12 30]),shading interp;colormap jet;axis off;colorbar;


运行结果如图1所示:



图1 四维切片图

4 图形绘制和编辑

4.1 色彩和线型

在MATLAB中为了区别画在同一窗口中的多条曲线,可以改变曲线的颜色和线型等图形属性,具体如表1所示。



【示例
1】绘制两条不同颜色,不同线型的曲线。

x = 0:0.2:8;
y1 = 0.2+sin(-2*x);
y2 = sin(x.^0.5);
plot(x,y1,'g-+',x,y2,'r--d')


运行结果如图1所示:



图1 不同线型的二维图

4.2 图形的标注与修饰

图形绘制后,需要对图形进行标注、说明等修饰性处理,以增加图的可读性,使之反映出更多的信息。

axis函数



【示例
2】利用axis函数为y=cos(x)绘制笛卡尔坐标系与绘制一个圆。

%利用axis函数为y=cos(x)绘制笛卡尔坐标系
x1 = 0:pi/100:3*pi;
y1 = cos(x1);
line([0,3*pi],[0,0])
hold on;
subplot(1,2,1)
plot(x1,y1)
axis([0 3*pi -2 2])
axis('xy')
hold off;
%利用函数axis绘制一个圆
alpha = 0:0.01:2*pi;
x2 = cos(alpha);
y2 = sin(alpha);
subplot(1,2,2)
plot(x2,y2)
axis([-2 2 -2 2])
grid on,axis square;


运行结果如图2所示:



图2 axis函数的使用

xlabel、ylabel函数与title函数



【示例 3】坐标轴标注函数xlabel、ylabel与title函数的使用。

x = [2004:1:2013];
y = [1.45 0.91 2.3 0.86 1.46 0.95 1.0  0.96 1.21 0.74];
xin = 2004:0.2:2013;
yin = spline(x,y,xin);
plot(x,y,'ob',xin,yin,'-.r')
title('2004年到2013年北京平均降水量图');
xlabel('年份','FontSize',10);
ylabel('每年降水量','FontSize',10);


运行结果如图3所示:



图3 坐标轴标注函数使用实例

grid函数与legend函数

grid函数用于给二维或三维图形的坐标面增加分割线。legend函数用于在图形上添加图例。



【示例
4】使用legend函数在图中添加图例并使用grid
on显示网格线。

y = magic(3);    %产生魔方阵
bar(y);
legend('第一列','第二列','第三列',2);
grid on


运行结果如图4所示:



图4 图形添加图例并显示网格线效果

text函数与gtext函数



【示例
5】使用函数gtext可以将一个字符串放到图形中,位置由鼠标来确定。

plot(peaks(80));
gtext('图形','FontSize',16)




原文作者:@Edchel,地址:http://blog.csdn.net/edchel/article/details/50589716

参考文献:

丁伟. 精通MATLAB R2014a[M].
北京:清华大学出版社, 2015. 115-122
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: