📄 18.txt
字号:
输出见图18.6.
图18.6 函数PEAKS的网格图
在显示器上要注意到线的颜色与网格的高度有关。一般情况下,函数mesh有可选的参量来控制绘图中所用的颜色。关于MATLAB如何使用、改变颜色在下一章讨论。在任何情况下,由于颜色用于增加图形有效的第四维,这样使用的颜色被称做伪彩色。
除了上例中的输入参量,函数mesh和大多数三维绘图函数都可按多种输入参量调用。这里所用的句法是最详细的,它给出了所有三个坐标轴的信息。最通常的变更方法是使用向量,将它传递给meshgrid,生成x与y坐标轴,比如mesh(x,y,z)。有关其它调用语法形式的信息,参阅MATLAB参考指南或在线帮助。
如上图所示,网格线条之间的区域是不透明的。MATLAB命令hidden控制网格图的这个特性。比如,用MATLAB的函数sphere产生两个球面如下:
? [X,Y,Z]=sphere(12);
? subplot(1,2,1)
? mesh(X,Y,Z),title( ‘ Opaque ‘ )
? hidden on
? axis off
? subplot(1,2,2),title( ‘ Transparent ‘ )
? mesh(X,Y,Z)
? hidden off
? axis off
输出见图18.7.
不透明 透明
图18.7
左边的球是不透明的(线被隐蔽),而右边的球是透明的(线未被隐蔽)。
MATLAB的mesh有两个同种函数:meshc,它画网格图和基本的等值线图;meshz,它画包含零平面的网格图。
? [X,Y,Z]=peaks(30);
? meshc(X,Y,Z) % mesh plot with underlying contour plot
? title( ‘ MESHC of PEAKS ‘ )
? meshz(X,Y,Z) % mesh plot with zero plane
? tiTle( ‘ MESH of PEAKS ‘ )
? title( ‘ MESH of PEAKS ‘ )
? hidden off % make mesh transparent so minimums can be seen
输出分别见图18.8和图18.9.
图18.8 函数PEAKS的网格图和基本等值线图
图18.9 函数PEAKS的带零平面的网格图
关于以上函数更详细的信息参阅MATLAB参考指南或使用在线帮助。
18.6 曲面图
曲面图,除了各线条之间的空档(称作补片)用颜色填充以外,和网格图看起来是一样的。这种图一般使用函数surf来绘制。自然,函数surf使用和函数mesh相同的调用语法。比如:
? [X,Y,Z]=peaks(30);
? surf(X,Y,Z)
? grid,xlabel( ‘ x-axis ‘ ),ylabel( ‘ y-axis ‘ ),zlabel( ‘ z-axis ‘ )
? title( ‘ SURF of PEAKS ‘ )
输出见图18.10.
图18.10 函数PEAKS的曲面图
曲面图的一些特性正好和网格图相反:它的线条是黑色的,线条之间的补片有颜色;而在网格图里,补片是黑色的而线条有颜色。对函数mesh,颜色沿着z轴按每一补片变化,而线条颜色不变。
在曲面图里,人们不必考虑象网格图一样隐蔽线条,但要考虑用不同的方法对表面加色彩。在前面的曲面图的例子中,就是分割成块,每块就象一块染色玻璃窗口或物体,黑线便是各单色染色玻璃块之间的连接。除此以外,MATLAB还提供了平滑加颜色和插值加颜色功能。这可以通过调用函数shading来实现。
? [X,Y,Z]=peaks(30);
? surf(X,Y,Z) % same plot as above
? grid,xlabel( ‘ x-axis ‘ ),ylabel( ‘ y-axis ‘ ),zlabel( ‘ z-axis ‘ )
? title( ‘ SURF of PEAKS ‘ )
? shading flat
输出见图18.11.
图18.11 函数PEAKS的平滑加彩色曲面图
如上所示平滑加色彩的例子中,每一补片仍保存着单一的颜色,但各块连接处的黑线已去掉。
? shading interp
输出见图18.12.
图18.12 函数PEAKS的插值加彩色曲面图
如上所示内插加色彩的例子中,同样去掉了线条,但各补片以插值加颜色,即各补片的颜色根据赋予顶点的色值,对其区间进行了插值计算。很明显,插值色彩需要比分块和平滑更多的计算量。在一些计算机系统中,插值色彩会产生非常长的打印延时或打印错误。这问题不在于PostScript文件太大,而是由于在打印机上产生沿图形曲面连续变化的阴影所需的巨大计算量。通常对这个问题最简单的解决方法是使用平滑加色彩法来打印。
色彩对surf作图的视觉效果有着巨大的影响。对网格图也是如此,尽管由于只有线条有颜色,对视觉效果的影响相对要小一些。
因为曲面图不能作成透明,但在一些情况下可以很方便地移走一部分表面以便看到表面以下部分,在MATLAB中,这是通过在所期望的洞孔的所在位置,将数据置为特定的NaN来实现。由于NaN没有任何值,所有的MATLAB作图函数都忽略NaN的数据点,在该点出现的地方留下一个洞孔。例子如下:
? [X,Y,Z]=peaks(30);
? x=X(1,:); % vector of x axis
? y=Y(:,1); % vector of y axis
? i=find(y>.8 & y<1.2); % find x-axis indices of hole
? j=find(x>-.6 & x<.5); % find x-axis indices of hole
? Z(i,j)=nan*Z(i,j); % set values at hole indices to NaNs
? surf(X,Y,Z)
? grid,xlabel( ‘ x-axis ‘ ),ylabel( ‘ y-axis ‘ ),zlabel( ‘ z-axis ‘ )
? title( ‘ SURF of PEAKS with a Hole ‘ )
输出见图18.13.
图18.13 函数PEAKS的带洞孔曲面图
MATLAB的surf也有两个同种函数:surfc,它画出具有基本等值线的曲面图;surfl,它画出一个有亮度的曲面图。例如:
? [X,Y,Z]=peaks(30);
? surfc(X,Y,Z) % surf plot with contour plot
? grid,xlabel( ‘ x-axis ‘ ),ylabel( ‘ y-axis ‘ ),zlabel( ‘ z-axis ‘ )
? title( ‘ SURFC of PEAKS ‘ )
输出见图18.14.
图18.14 函数PEAKS的曲面图和基本等值线图
? [X,Y,Z]=peaks(30);
? surfl (X,Y,Z) % surf plot with lighting
? shading interp % surfl plots look best with interp shading
? colormap pink % they also look better with shades of a single color
? grid,xlabel( ‘ X-axis ‘ ),ylabel( ‘ Y-axis ‘ ),zlabel( ‘ Z-axis ‘ )
?title( ‘ SURFL OF PEAKS ‘ )
输出见图18.14.
图18.16 函数PEAKS的带光线照明曲面图
关于加到曲面的亮度,函数surfl作了许多假设。有关设置亮度属性的详细信息参阅MATLAB参考指南的函数surfl或使用在线帮助。同样,在上面执行的命令中,colormap是MATLAB函数,它对图形施加一套不同的颜色。这个函数在下一章讨论。
18.7 等值线图
MATLAB提供了另一种基本的三维图形,即三维等值线图。这种图形通过函数contour3来绘制。
? [x,y,z]=peaks(30);
? contour3(X,Y,Z,16) % draw sixteen contour lines
? grid,xlabel( ‘ x-axis ‘ ),ylabel( ‘ y-axis ‘ ),zlabel( ‘ z-axis ‘ )
? title( ‘ CONTOUR3 of PEAKS ‘ )
输出见图18.16.
图18.16 函数PEAKS的三维等值线图
可以看到,图形中每一条线的颜色遵循了与二维函数plot一样的次序。这种颜色次序可以表现出明显的对比,但经常模糊了所代表的数据的一些重要特性。如果能使每一条线遵循在网格图和曲面图里所用的加色方法,那么效果会好得多。也许在MATLAB的下一个版本中,这种颜色设置会成为缺省设置,但使用在下一章要讨论的MATLAB图形处理能力,也能解决这个问题。
? [X,Y,Z]=peaks(30);
? N=16; % number of contour lines and their colors
? clf % clear the current figure
? view(3) % set view to 3-D
? hold on % hold blank screen
? set(gca, ‘ ColorOrder ‘ ,hsv(N)) % use colors from default hsv colormap
? contour3(X,Y,Z,N) % draw N contour lines
? grid,xlabel( ‘ X-axis ‘ ),ylabel( ‘ Y-axis ‘ ),zlabel( ‘ Z-axis ‘ )
? title( ‘ CONTOUR3 of PEAKS ‘ )
? hold off
输出见图18.17.
图18.17 函数PEAKS的三维等值线图
现在,各条等值线的颜色沿着z轴的变化和网格图和曲面图一样。为方便起见,这种策略已体现在精通MATLAB工具箱的函数mmcont3中。mmcont3具有和函数contour3相同的调用语法的变化,并允许选择可用的颜色映象。例如,? mmcont3(X,Y,Z,N,‘hsv’)复制上面的图形。mmcont3的在线帮助如下:
? help mmcont3
MMCONT3 3-Dcontour plot using a colormap
MMCONT3(X,Y,Z,N,C) plots N contours of Z in 3-D using the color specified in C.C can be
a linestyle and color as used in plot,e.g., ‘ r- ‘ ,or C can be the string name of a colormap.X and Y.
define the axis limits.
If not given default argument values are :N=10 ,C= ‘ hot ‘ ,X and Y=row and column indices of
Z.Examples:
MMCONT3(Z) 10 lines with hot colormap
MMCONT3(Z,20) 20 lines with hot colormap
MMCONT3(Z, ‘ copper ‘ ) 10 lines with copper colormap
MMCONT3(Z,20, ‘ gray ‘ ) 20 lines with gray colormap
MMCONT3(X,Y,Z, ‘ jet ‘ ) 10 lines with jet colormap
MMCONT3(Z, ‘ c-- ‘ ) 10 dashed lines in cyan
MMCONT3(X,Y,Z,25, ‘ pink ‘ ) 25 lines in pink colormap
CS=MMCONT3( . . .) returns the contour matrix CS as described in CONTOURC.
[CS,H]=MMCONT3( . . .) returns a column vector H of handles to line objects
帮助信息:
MMCONT3(X,Y,Z,N,C)用由C指定的颜色在三维空间内画N条Z方向的等值线图。C可以是在plot中使用的线形 和颜色,例如 ‘ r- ‘ ;或者C可以是一个颜色映象的字符串名。X和Y指定了坐标轴的范围。如果 未指定参数,缺省的参数值是:N=10,C= ‘ hot ‘ ,X和Y分别是Z的行和列的下标。举例:
MMCONT3(Z) 用暖色映象画10条等值线
MMCONT3(Z,20) 用暖色映象画20条等值线
MMCONT3(Z, ‘ copper ‘ ) 用铜黄色映象画10条等值线
MMCONT3(Z,20, ‘ gray ‘ ) 用灰色映象画20条等值线
MMCONT3(X,Y,Z, ‘ jet ‘ ) 用**‘jet’暖色映象画10条等值线
MMCONT3(Z, ‘ c-- ‘ ) 画10条青蓝色的虚划线等值线
MMCONT3(X,Y,Z,25, ‘ pink ‘ ) 用粉红色映象画25条等值线
CS=MMCONT3(…) 如在CONTOURC中描述,返回等值线矩阵CS。
[CS,H]=MMCONT3(…) 把句柄的列向量H返回到线条对象。
等值线也可由一种颜色给出:
? [x,y,z]=peaks(30);
? contour3(X,Y,Z,16, ‘ y ‘ ) % draw sixteen contour lines in yellow
? grid,xlabel( ‘ x-axis ‘ ),ylabel( ‘ y-axis ‘ ),zlabel( ‘ z-axis ‘ )
? title( ‘ CONTOUR3 of PEAKS ‘ )
输出见图18.18
图18.18 函数PEAKS的黄色三维等值线图
关于颜色使用的详细信息参阅下一章;以上函数使用的详细信息参阅MATLAB参考指南或使用在线帮助。
18.8 三维数据的二维图
有些情况下,希望得到三维数据的二维表示。在MATLAB里这一点是通过用函数view设置视角使其中一维不出现来实现的。另外,MATLAB还提供了两个函数,将contour3和surf向下正视到x-y平面。例如,函数contour3的二维图就等价于contour。
? [X,Y,Z]=peaks(30);
? contour(X,Y,Z,16) % draw sixteen contour lines
? xlabel( ‘ X-axis ‘ ),ylabel( ‘ Y-axis ‘ )
? title( ‘ CONTOUR of PEAKS ‘ )
输出见图18.19
图18.19 函数PEAKS的等值线图
要注意,它如何等效于使用contour3以及如何改变视点俯视到x-y平面。如同contour3,图中的等值线利用plot命令的六种基本颜色。如前所述,因为颜色不提供视觉效果,这类图形不好使用并且引起混淆。这种缺省行为也许在MATLAB的下一版本中会改变,但也可用句柄图形来改变。
? [X,Y,Z]=peaks(30);
? N=16; % number of contour lines and their colors
? clf % clear the current figure
? hold on % hold blank screen
? set(gca, ‘ ColorOrder ‘ ,hsv(N)) % use colors from default hsv colormap
? contour(X,Y,Z,N) % draw N contour lines
? xlabel( ‘ X-axis ‘ ),ylabel( ‘ Y-axis ‘ ),zlabel( ‘ Z-axis ‘ )
? title( ‘ CONTOUR of PEAKS ‘ )
? hold off
输出见图18.20
图18.20 函数PEAKS的等值线图
现在,等值线遵循hsv颜色映象里的级差,颜色提供了一种有用的效果!为方便起见,上述策略已体现在精通MATLAB工具箱的函数mmcont2中。mmcont2接受和函数contour相同的调用语法变更,并允许选择一个可用的颜色映象。例如,? mmcont2(X,Y,Z,N,‘hsv’)复制上面的图形。mmcont2的在线帮助如下:
? help mmcont2
MMCONT2 2-D contour plot using a colormap.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -