数据可视化(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所示:
图1 演示绘图基本步骤
【示例
2】用不同线型和颜色在同一坐标内绘制曲线
及其包络线。
图2 二维曲线
polar函数用来绘制极坐标图,其调用格式为:
polar(theta,rho,选项)
其中,theta为极坐标极角,rho为极坐标失径,选项的内容与plot函数相似。
【示例
3】绘制r=sin(x)cos(x)的极坐标图。
运行结果图3所示:
图3 极坐标二维图
【示例
4】其他二维图形画图示例
运行结果如图4所示:
图4 其他类型的二维图
面积域area的特点是:以“前”条曲线作为基线,再取值绘制而成。
注意:每个“因素”数据取列向量形式排放。
【示例
5】面域图示例
运行结果如图5所示:
图5 面域图
【示例
6】填色图示例
运行结果如图6所示:
图6 填色图
【示例
7】射线图compass和羽毛图feather示例。
运行结果如图7所示:
图7 射线图和羽毛图
【示例
8】用Voronoi多边形勾画每个点的最邻近范围。Voronoi多边形在计算机几何、模式识别中有重要应用。
运行结果如图8所示:
图8 多边形图
【示例
9】用彩带绘图命令ribbon示例。
运行结果如图9所示:
图9 彩带图
【示例
10】本例重点演示所谓“二维半”命令:伪彩图pcolor;等位线命令contour、contourf;等位线标高命令clabel的配合使用和区别。
图10 二维半图
2 绘制三维图形
plot3是基本的绘图命令,它把数学函数用曲线描绘出来。
plot3:绘制三维曲线图形。
stem3:绘制三维枝干图。
axis:设置坐标属性。
grid on:打开坐标网络。
view(方位角,仰俯角):设置视角。
【示例
1】当输入参数是向量(x,y,z)时,plot3(x,y,z)生成曲线。
图1 三维螺旋线图
mesh:绘制三维网格图。
meshc:绘制带有基本等高线的网格图。
meshz:绘制带有基准平面的网格图。
【示例
2】运用mesh、meshc、meshz绘制三维曲线图。
图2 三维曲线图
surf:绘制面状图。
surfl:(是L不是1)绘制设定光源方向的面状图。
shading interp和shading flat:把曲面上的小格平滑掉,使光滑。
shading faceted:是默认状态,它使曲面上有小格。
colormap:设定图形的颜色。
pink:粉红色;copper:铜色;gray:灰黑色;hsv:色调-饱和度-亮值彩色图;
cool:蓝绿和洋红阴影彩色图;hot:黑-红-黄-白彩色图。
【示例
3】命令surf和surfl比较。
运行结果如图3所示:
图3 高斯分布矩阵不带光源方向(左)和带光源方向图(右)
bar3:绘制垂直方向直方图。
bar3h:绘制水平方向直方图。
stem3:绘制三维枝干图。
contour3:绘制等高线图。
【示例
4】绘制直方图、三维枝干图和等高线图。
运行结果如图4所示:
图4 三维直方图、枝干图和等高线图
【示例
5】绘制瀑布图。[注:waterfall,绘制瀑布图]。
运行结果如图5所示:
图5 高斯分布矩阵的瀑布图
【示例
6】三维散点图示例。[注:scatter3,绘制三维散点图]。
运行结果如图6所示:
图6 三维散点图示例
【示例
7】绘制几何解析图形,绘制抛物曲面
,绘制球面
。
运行结果如图7所示:
图7 二次抛物曲面与球面图像
3 绘制四维图形
用色图矩阵表现函数的不同特征。演示:当三维网曲线图、曲面图的第四个输入变量取一些特殊矩阵时,色彩就能表现或加强
函数的某特征,如梯度、曲率、方向导数等。
【示例
1】利用slice绘制四维切面图。
运行结果如图1所示:
图1 四维切片图
4 图形绘制和编辑
4.1 色彩和线型
在MATLAB中为了区别画在同一窗口中的多条曲线,可以改变曲线的颜色和线型等图形属性,具体如表1所示。
【示例
1】绘制两条不同颜色,不同线型的曲线。
运行结果如图1所示:
图1 不同线型的二维图
4.2 图形的标注与修饰
图形绘制后,需要对图形进行标注、说明等修饰性处理,以增加图的可读性,使之反映出更多的信息。
axis函数
【示例
2】利用axis函数为y=cos(x)绘制笛卡尔坐标系与绘制一个圆。
运行结果如图2所示:
图2 axis函数的使用
xlabel、ylabel函数与title函数
【示例 3】坐标轴标注函数xlabel、ylabel与title函数的使用。
运行结果如图3所示:
图3 坐标轴标注函数使用实例
grid函数与legend函数
grid函数用于给二维或三维图形的坐标面增加分割线。legend函数用于在图形上添加图例。
【示例
4】使用legend函数在图中添加图例并使用grid
on显示网格线。
运行结果如图4所示:
图4 图形添加图例并显示网格线效果
text函数与gtext函数
【示例
5】使用函数gtext可以将一个字符串放到图形中,位置由鼠标来确定。
原文作者:@Edchel,地址:http://blog.csdn.net/edchel/article/details/50589716
参考文献:
丁伟. 精通MATLAB R2014a[M].
北京:清华大学出版社, 2015. 115-122
做出了很大的改进和完善,本文基于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
相关文章推荐
- vs2010调用matlab
- Matlab里面的指针
- MATLAB Floyd算法求最短路
- [zz]求一维序列的信息熵(香浓熵)的matlab程序实例
- matlab 灰色系统预测 GM(1,1) 数学建模
- MATLAB.NET混合编程之二~~由C#调用MATLAB编译生成的dll
- MATLAB GUI常用函数使用
- MATLAB GUI常用函数使用
- MATLAB.NET混合编程之一~~由MATLAB编译dll
- matlab画图,变长坐标轴
- matlab
- matlab出现Invalid file identifier. Use fopen to generate a valid file identifier错误
- Matlab矩阵基础
- 数字信号处理之经典谱估计与现代谱估计
- Matlab lugui
- matlab中关于fix(x),floor(x),ceil(x)的区别
- 关于Matlab中括号用法的总结
- Matlab基础
- Matlab字符串处理
- Matlab运算符与运算