图形和声音的结构

图形结构
"图形和声音" 讨论了如何用 PlotListPlot 等函数绘制函数和数据的图形. 本节讨论 Wolfram 语言如何表示这些图形,如何编程去生成更复杂的图形.
基本思想是 Wolfram 语言用图形基元的集合表示所有图形. 图形基元包括代表图像基本元素的 Point (点),Line (线) 和 Polygon (多边形),以及 RGBColorThickness 等指令.
生成一列点的图形:
InputForm 告诉 Wolfram 语言如何表示图形. 每个点被表示为一个 Point 图形基元的坐标形式. 本例中使用的所有图形选项也被给出:
在 Wolfram 语言中, 每个完整的图形块都用图形对象表示. 图形对象的种类很多,分别对应于不同类型的图形. 每类图形对象都有确定的头部以表明其类型.
Graphics[list]
生成二维图形
Graphics3D[list]
生成三维图形
Wolfram 语言的图形对象.
PlotListPlot 等在 "图形和声音的结构" 中讨论的函数都是按照先建立 Wolfram 语言内部图形对象,然后显示其顺序工作.
在 Wolfram 语言中,用户可以自行建立图形对象产生其他类型的图像. 由于在 Wolfram 语言中的图形对象是符号表达式,所以能用所有的 Wolfram 语言标准函数对其进行操作.
图形对象在输出时被 Wolfram 语言前端自动格式化成图形形式. 图形也可以用 Print 命令以副产品形式输出.
对象 Graphics 被 Wolfram 语言计算,但分号阻止了其输出:
可以使用 Print 命令以副产品形式输出图形 . 副产品形式的图形在输出时没有标签 Out[]
Show[g,opts]
显示由新的选项 opts 指定的一个图形对象
Show[g1,g2,]
显示由选项 g1 等指定的多个图形对象的组合
Show[g1,g2,,opts]
显示由新的选项 opts 指定的多个图形对象
显示图形对象.
Show 可用于改变已生成图形的选项,也可用于合并多幅图形.
Show 来调整一个已有图形的 Background 选项:
Show 来合并两幅图形. PlotRange 和其他选项所用的值都由第一副图形决定:
对整幅图形指定新的选项:
Graphics directives
范例:RGBColorThickness
Graphics options
修改图形的局部和全局方式.
给定一个图形基元列表后,Wolfram 语言提供了两种方式去修改最终的图形. 首先,可以在图形基元列表中插入一些图形指令,例如 RGBColor,以修改随后列表中的图形基元. 用这种方式,用户可以指定如何修改一个给定的图形基元列表.
创建一个包含 Polygon 图形基元的二维图形对象:
InputForm 完整地显示了图形对象:
用上面创建的图形基元,并增加了图形指令 RGBColorEdgeForm
通过插入图形指令,可以指定图形基元的显示方式. 然而,用户往往经常会希望通过全局修改来改变整个图形的显示. 使用图形选项可以达到这一目的.
通过增加图形选项 Frame 用户可以修改图形的整体外观:
InputForm 显示了选项被对象 Graphics 所采用:
Show 中可以指定图形选项. 因此,一个直截了当的方式是取一个图形对象,然后选择不同的图形选项将其显示.
然而应注意到 Show 总是返回已显示的图形对象. 如果在 Show 中指定图形选项,这些选项就会自动的插入在 Show 返回的图形对象中. 于是,除非明确指定其他的图形选项,对相同的对象再次使用 Show 显示的图形将是相同的. 在任何情况下,新指定的选项会覆盖既有的选项.
Options[g]
对一个图形对象给出一个图形选项列表
Options[g,opt]
给出某个选项的设置
找出图形对象的选项.
一些图形选项可以用作产生图形的可视化函数的选项. 对于取 Automatic 的选项有时会被可视化函数赋以特定值.
一个图形:
Wolfram 语言使用内部算法为输出图形的 PlotRange 计算出一个特定值:
FullGraphics[g]
将图形选项指定的对象转化为明确的图形基元列表
确定图形块的完全形式.
Axes 等图形选项,Wolfram 语言的前端会自动画出用户需要的坐标轴等对象. 这些对象由选项值表示,而非被确定的图形基元列表表示. 然而,用户会需要要找到代表这些对象的图形基元列表. 函数 FullGraphics 给出不使用任何选项的情况下,生成图形的完整的图形基元列表.
画出一列值:
FullGraphics 生成了包括代表坐标轴等的图形基元的一个图形对象:
二维图形元素
Point[{x,y}]
在位置 xy 的一个点
Line[{{x1,y1},{x2,y2},}]
通过 {x1,y1}{x2,y2} 的线段
Rectangle[{xmin,ymin},{xmax,ymax}]
填充的矩形
Polygon[{{x1,y1},{x2,y2},}]
具有指定角列表的填充多边形
Circle[{x,y},r]
圆心在 xy,半径为 r 的圆
Disk[{x,y},r]
圆心在 xy,半径为 r 的填充圆盘
Raster[{{a11,a12,},{a21,},}]
灰度在 0 和 1 之间的矩形阵列
Text[expr,{x,y}]
中心在 xyexpr 文本 (见 "文本中的图形基元")
基本的二维图形元素.
一个线基元:
表明线是二维图形对象:
重新显示线段,并添加了坐标轴:
可以将用图形基元产生的图形对象和用 Plot 等函数产生的图形对象叠合在一起.
产生一个通常的 Wolfram 系统图形:
将这个图形与前面得到的锯齿线叠合在一起:
可以将不同的图形元素在一个列表中给出从而将其组合起来. 在二维图形中,Wolfram 系统按所给定的顺序生成图形,后面的图形元素画在前面的元素之上.
两个蓝色的 Rectangle (矩形) 图形元素:
将矩形画在前面定义的锯齿线之上:
Polygon (多边形) 图形基元选取一个 坐标列表,其对应于多边形的顶点. Wolfram 系统将第一个和最后一个顶点连在一起,并填充这个多变形.
一个普通五边形的各顶点坐标:
显示五边形. 由于选择了缺省的纵横比,该五边形看上去像被压扁了:
Point[{pt1,pt2,}]
pt1pt2 组成的一个复点
Line[{line1,line2,}]
由线段 line1line2 组成的一个复线
Polygon[{poly1,poly2,}]
poly1poly2 组成的一个复多变形
可以取多个元素的基元.
类似的,通过将一个坐标列表置于一个单一 Point (点)基元内部的方法可以表示大量的点. 这种表示方法非常高效,并且可以被 Wolfram 系统的前端更快速地显示. RGBColor 等图形指令会一致地应用于整个基元集合.
创建一个基于前面定义的坐标集合的复多变形:
一个蓝色的复点:
Circle[{x,y},r]
中心在 {x,y},半径为 r 的圆
Circle[{x,y},{rx,ry}]
具有长短半轴 rxry 的椭圆
Circle[{x,y},r,{theta1,theta2}]
圆弧
Circle[{x,y},{rx,ry},{theta1,theta2}]
椭圆弧
Disk[{x,y},r]
,etc.
填充的圆盘
圆和圆盘.
显示两个半径为 2 的圆:
显示了几个圆盘,其 方向的半轴逐渐增大, 方向的半轴不断逐渐缩小:
Wolfram 系统可产生圆弧和椭圆弧. 这两种情况中的对象都有起始和终了角度指定. 角度按弧度计,逆时针方向为正,0 对应于 的正方向.
画出一个 140°、中心在原点的楔形:
Raster[{{a11,a12,},{a21,},}]
值在0和1之间的灰度阵列
Raster[{{{a11,o11},},}]
阻光度在0和1之间的灰度阵列
Raster[{{{r11,g11,b11},},}]
值在0和1之间的RGB值阵列
Raster[{{{r11,g11,b11,o11},},}]
阻光度在0和1之间的RGB值阵列
Raster[array,{{xmin,ymin},{xmax,ymax}},{zmin,zmax}]
灰度在 zminzmax 之间的由 {xmin,ymin}{xmax,ymax} 定义的矩形阵列
基于光栅的图形元素.
一个值在0和1之间的 4×4 阵列:
使用值阵列作为光栅的灰度:
显示两个重叠的光栅:
选项 ColorFunction 可以用于改变 Raster (光栅)的缺省颜色:
图形指令和选项
在 Wolfram 语言中设置图形对象时,一般是给出图形元素的一个列表. 在这个列表中可以包含图形指令以指出后继元素显示的方式.
通常,一个图形对象的图形基元列表是一个嵌套列表. 当在这个结构中插入图形指令时,一个插入指令会影响其所在集合以及可能包含的子集合的所有后继元素. 然而图形指令不会影响到其所在集合之外的元素.
第一个子集合包含图形指令 GrayLevel
只有第一个子集合中的矩形受 GrayLevel 指令的影响:
GrayLevel[i]
0(黑)和1(白)之间的灰度
RGBColor[r,g,b]
用0和1指定红、绿、蓝分量的颜色
Hue[h]
色度值 h 在0和1之间的颜色
Hue[h,s,b]
色度、饱和度和亮度值均在0和1之间的颜色
Wolfram 语言中的基本颜色指定.
Wolfram 语言直接接收许多指定颜色所用的颜色名. 例如 RedGrayLightGreenPurple 这些颜色名是作为衡量 RGBColor 的变量来执行的. 这些颜色名可与颜色指令互换.
第一幅图用一个颜色名来上色,第二幅图则用精确调制的 RGBColor 指示上色:
函数 Hue[h] 可以很方便地只用一个参数来指定颜色的范围. h 从0 到1变化,Hue[h] 由红、黄、绿、青、蓝、洋红、黑再变到红. Hue[h,s,b] 不仅可以指定颜色的 色调,还可以指定 饱和度亮度. 饱和度等于1给出最深的颜色,饱和度降到零的过程中,颜色越来越浅.
用户在给指一个图形指令如 RGBColor 时,将影响到一个特定列表中的所有后继图形元素. Wolfram 语言也支持仅影响特定类型的图形元素的各种图形指令.
图形指令 PointSize[d] 指定了所有的 Point 元素在图形对象中应当绘制成以直径为 d 的圆. PointSize 中,直径 d 是整个图形宽度的一个比例.
Wolfram 语言也提供了图形指令 AbsolutePointSize[d],其用固定的单位指定点的 绝对 直径. 该单位为 英寸,约等于打印机的一个点.
PointSize[d]
按整个图形宽度的比例给出所有点的直径 d
AbsolutePointSize[d]
用绝对单位给出所有点的直径 d
点的图形指令.
一列点:
使所有点的直径是图形宽度的 1/10:
每个点是3个绝对单位:
Thickness[w]
按整个图形宽度的比例给出所有线的宽度 w
AbsoluteThickness[w]
用绝对单位给出所有线的宽度 w
Dashing[{w1,w2,}]
将所有的线显示为长度依次为 w1w2 的虚线段
AbsoluteDashing[{w1,w2,}]
用绝对单位去度量虚线段
CapForm[type]
给出所有线的端点形状
JoinForm[type]
给出所有线的接点形状
线的图形指令.
生成一列绝对宽度不同的线条:
使这些线的图形:
图形指令 Dashing 可产生各种虚线. 其基本思想是把线分解为交替绘出和省去的小段. 通过改变这些小段的长度,可以得到不同风格的线. Dashing 允许用户指定一系列小段的长度. 在画出整条线的过程中,这些小段的长度序列可以根据需要多次重复.
每小段的长度相同的虚线:
一条点化虚线:
Dashing 的功能可以通过指定一个空指令而关闭. 此处仅第二条线的 Dashing 功能被关闭:
图形指令要求给出一个特定的数值来表示大小,也接受 TinySmallMediumLarge 等文字描述. 对于每一个指令来说,这些值被精确地调整以保证图形的显示能被人眼正确地感知.
指定图形的宽度为大,虚线长度为中等:
指定整个复点为大的绿点:
图形指令 CapForm 用于指定直线端点的形状. 端点形状可以设为 "Butt""Square"、或者 "Round".
显示CapForm 可以选择的不同形状:
CapForm["Butt"] 指明线段要恰好在其终点处结束. "Square" 使线段端点比线段终点延长了一半的线宽. "Round" 使线段端点为直径等于线宽的半圆弧.
使用 JoinForm 指令可以指定线段之间接点的形状.
JoinForm 可以选择的不同形状:
JoinForm[{"Miter",d}]
使接点最长可延伸至线宽的 d
指定斜面连接的最大长度.
当相邻线段的夹角很小时,交点处的点会变得很长. 在缺省情况下,过长的点会被削平. 其斜面连接的极限长度缺省设置使得五点连成的星型交点尖锐,但更尖锐的接点会被削成斜面. 可以使用 JoinForm 设定斜角极限来精确控制尖锐的交角被削平的程度. 斜角极限指的是被削成斜面前交角处的点被允许的可以超过顶点的线宽数量.
缺省的斜角极限使得七角星型的点变钝:
通过指定一个大的斜角极限使得星型尖锐:
RoundingRadius->r
指定圆角使用的半径 r
Rectangle 中的 RoundingRadius 选项.
可以使用 RoundingRadius 选项,通过指定矩形顶点的半径,将 Rectangle 基元的角变成圆的. 实际上圆角程度不能超过相邻面长度的一半.
圆角程度不同的矩形:
使用 Wolfram 语言图形指令的一种方法是将其直接插入图形对象使用的图形基元列表中. 然而有时需要图形指令全局地使用,例如确定一类图形元素显示的总体风格. 可以用一些图形选项的的设置按图形指令去指定这样的风格.
PlotStyle->style
指定在 Plot 中所有曲线的风格
PlotStyle->{{style1},{style2},}
指定在 Plot 的曲线序列中循环使用的风格
MeshStyle->style
指定密度图和曲面图中的网格使用的风格
BoxStyle->style
指定三维图形中边界单元所使用的风格
一些指定风格的图形选项.
产生一个指定所有曲线使用同种风格的图形:
可以使用不同的 PlotStyle 表达式指定每条曲线的风格:
各种 风格选项 可指定如何显示一个图形中的图形元素. Wolfram 语言也提供了影响整个图形显示的选项.
Background->color
指定图形的背景颜色
BaseStyle->color
指定图形的基本风格,相关元素不受 PlotStyle 的影响
Prolog->g
在画图前给出图形
Epilog->g
在画图后给出图形
影响整个图形的选项.
在灰色背景下用白色画出整个图形:
将轴也画成白色:
二维图形的坐标系
在 Wolfram 语言中产生图形对象时,用户给出所出现的各种图形元素的坐标. 当 Wolfram 语言绘制图形对象时,必须把原始坐标转换为 显示坐标显示坐标指明每个图形元素应该放置在最终显示区域的哪一个地方.
PlotRange->{{xmin,xmax},{ymin,ymax}}
包含在图形中的原始坐标的范围
决定由原始坐标到显示坐标如何转换的选项.
当 Wolfram 语言绘制图形对象时,首先要搞清楚实际显示的 的原始坐标范围. 在这个范围之外的任何图形元素都会被剪切而不显示.
选项 PlotRange 指明了要包含的原始坐标范围. 正如在 "图形选项" 所讨论的,缺省设置是PlotRange->Automatic,这使得 Wolfram 语言选择的范围能在去掉异常值"的同时,尽量包括图形中所有令人感兴趣"的部分. 通过设置 PlotRange->All,可以使 Wolfram 语言包括所有点. 用户也可以指明要包括的坐标范围.
建立一个顶点坐标大致都在 内的多变形对象:
这种情况下,多变形对象几乎填满了全部显示区域:
给出一个明确的 PlotRange,可以使用户将图形的某一部分放大:
AspectRatio->r
定义显示区域图形的高宽比为 r
AspectRatio->Automatic
按原始坐标系确定显示区域的形状
确定显示区域的形状.
到此为止,我们所讨论的是 Wolfram 语言如何将用户给定的原始坐标转换成最终显示区域的位置. 接下来要讨论的是最终显示区域的形状.
大多数计算机系统有确定的屏幕或纸张输出区域,Wolfram 语言的显示区域必须与之匹配. 如何填充这些区域由形状和纵横比确定. 通常,选项 AspectRatio 定义最终显示区域的纵横比.
重要的一点是要注意设定的 AspectRatio 不影响尺度或显示坐标的含义. 在显示区域内这些坐标总是从0到1变化. AspectRatio 所改变的是这个显示区域的形状.
在二维图形中, AspectRatio 的缺省设置是 Automatic. 这样图形所用的纵横比由原始坐标系决定,而非一个固定值. 原始坐标系中的 方向的一个单位与最终显示区域中 方向的一个单位的距离相同. 这样,用户在原始坐标系中定义的对象按其自然形状显示.
生成了一个对应于正六边形的图形对象. 用缺省设置 AspectRatio->Automatic,最终显示区域的纵横比由原始坐标系确定,并且该六边形按其自然形状显示:
显示区域画出了高度为宽度三倍的六边形:
有些时候直接给定图形元素的显示坐标会更方便. 要做到这一点,可以使用尺度坐标 Scaled[{sx,sy}] 而非 {x,y}. 尺度坐标在 方向上的变化范围均是从 0 到 1,原点选在图形范围的左下角.
{x,y}
原始坐标
Scaled[{sx,sy}]
图形范围上的尺度坐标
ImageScaled[{sx,sy}]
显示区域上的尺度坐标
二维图形的坐标系.
由于框架标签使得显示区域明显比画图范围大:
使用 Scaled 尺度坐标,矩形中心在原点,也在指定画图范围的中心:
使用 ImageScaled 坐标,矩形恰好在图形的中心,但不与绘图范围的中心重合:
使用 {x,y}Scaled[{sx,sy}] 或者 ImageScaled[{sx,sy}],用户或者完全用原始坐标或者完全适用尺度坐标来定位. 然而有时会需要混合使用这些坐标系. 例如,用户想要在某一点处画一条线,而线段长度与图形宽度成一定比例,这就需要使用原始坐标指定线的基本位置,而用尺度坐标来指定其长度.
Scaled[{dsx,dsy},{x,y}] 可用于指定一个用原始和尺度坐标共同确定的位置. 这种情况下,{x,y} 用原始坐标给出位置,而 {dsx,dsy} 用尺度坐标给出从该位置算起的偏距.
Circle[{x,y},Scaled[sx]]
半径以图形范围的宽度加刻度的圆环
Disk[{x,y},Scaled[sx]]
半径以图形范围的宽度加刻度的圆盘
FontSize->Scaled[sx]
字体大小以图形范围的宽度加刻度
Scaled 可用于单一自变量的一些场合.
圆环的半径和字体的大小都在 Scaled 中给出值:
Scaled[{sdx,sdy},{x,y}]
从原始坐标的尺度偏距
ImageScaled[{sdx,sdy},{x,y}]
从原始坐标的图像尺度偏距
Offset[{adx,ady},{x,y}]
从原始坐标的绝对偏距
Offset[{adx,ady},Scaled[{sx,sy}]]
从尺度坐标的绝对偏距
Offset[{adx,ady},ImageScaled[{sx,sy}]]
从图像尺度坐标的绝对偏距
偏距的位置.
每条线有六个打印机点数的绝对长度:
可以在 Circle 内部使用 Offset, 仅用一个自变量画出绝对半径为一定值的圆环:
对于大部分的图形,用户通常希望不同对象间的绝对位置能随着改变所画图形的坐标或整体尺寸的改变而自动调整. 然而在某些时候又希望对象间的偏距能保持固定不变. 例如当用户在画一个图形集合时,尽管不同的图形有不同的形式,但用户又希望某些特征能够保持一致.
Offset[{adx,ady},position] 允许用户通过给出用原始坐标或尺度坐标定义的绝对偏距来指定对象的位置. 偏距的单位以打印机的点表示,等于 英寸.
在图形中加上文本,所用到的字体大小也用打印机的点来表示. 因此,字体为10点 其字母的基本高度是打印机的10个点. 可以使用 Offset 使图形中的文字移动,或者创建与字体大小匹配的画图符号.
使用尺度坐标,用户可以用显示区域的尺寸来定义图形元素的大小. 然而,用户不能告诉 Wolfram 语言某一特定图形元素的实际物理尺寸. 当然,尺寸最终取决于用户的图形输出设备,而不能由 Wolfram 语言来决定. 尽管如此,在 "图形指令和选项" 中所讨论的 AbsoluteThickness 等图形指令能够用于给出某一特定图形元素的 绝对尺寸. 这种方式下定义的尺寸会被大部分、但不是全部输出设备所采用. (例如,对图形进行光学投影时,不可能也不需要保持其中图形基元的绝对尺寸.)
二维图形的标记
Axes->True
给出一对坐标轴
GridLines->Automatic
在图形中加网格线
Frame->True
将坐标轴放在围绕图形的框架上
PlotLabel->"text"
给出图形的总标记
二维图形标记的方法.
使用缺省值 Axes->True 的一个图形:
设置 Frame->True 生成有坐标轴的框架,并且从原坐标轴上去掉了刻度:
包含了网格线,以浅灰色显示:
Axes->False
不画坐标轴
Axes->True
同时画出
Axes->{False,True}
画出 轴,不画
AxesOrigin->Automatic
自动选择坐标轴的交点
AxesOrigin->{x,y}
指定交点
AxesStyle->style
同时指定坐标轴的风格
AxesStyle->{xstyle,ystyle}
分别指定各坐标轴的风格
AxesLabel->None
不给坐标轴标记
AxesLabel->ylabel
坐标轴标记
AxesLabel->{xlabel,ylabel}
坐标轴同时标记
坐标轴选项.
让坐标轴在 {5,0} 处相交,并对每个坐标轴加标记:
Ticks->None
不加刻度
Ticks->Automatic
自动加刻度
Ticks->{xticks,yticks}
对每个坐标轴指定刻度
设置刻度选项 Ticks.
使用缺省设置 Ticks->Automatic,Wolfram 语言生成一定量的主次刻度,将其放在坐标轴上产生最小十进制数的刻度上. 有时需要明确指定刻度的位置和性质. 例如,当使用 倍的刻度或非线性刻度使用明确指定.
None
无刻度
Automatic
自动标刻度
{x1,x2,}
在指定位置标刻度
{{x1,label1},{x2,label2},}
用指定标记标刻度
{{x1,label1,len1},}
用指定长度标刻度
{{x1,label1,{plen1,mlen1}},}
在正负方向用指定长度标刻度
{{x1,label1,len1,style1},}
用指定风格标刻度
func
作用于 xminxmax 以得到刻度选项的函数
各坐标轴的刻度选项.
坐标轴上按指定位置标刻度,在 坐标轴上自动标刻度:
的倍数处加了刻度,但未加标记:
当需要产生复杂的刻度标记时,定义一个刻度标记函数是方便的,该函数对指定的坐标轴产生适当的刻度标记.
定义一个函数给出间隔为1的刻度标记集合:
units 函数对 轴给出标记:
Frame->False
无框架
Frame->True
画出围绕图形的框架
FrameStyle->style
指定框架的风格
FrameStyle->{{left,right},{bottom,top}}
指定框架中每条边的风格
FrameLabel->None
框架无标记
FrameLabel->{{left,right},{bottom,top}}
在框架边缘给出标记
RotateLabel->False
不转动标记中的文本
FrameTicks->None
在框架边缘画刻度
FrameTicks->Automatic
自动给出刻度位置
FrameTicks->{{left,right},{bottom,top}}
给框架边缘指定刻度
框架坐标轴选项.
选项 Axes 可在图中画出一对坐标轴. 但有时会需要在整个图形周围显示刻度. 选项 Frame 可以画出对应于图形框架四条边的四个坐标轴.
画出框架坐标轴,并对每个作出标记:
GridLines->None
无网格线
GridLines->Automatic
自动给出网格线的位置
GridLines->{xgrid,ygrid}
类似于刻度指定网格线
网格线选项.
Wolfram 语言中的网格线选项与刻度类似,可以按同样的方法明确指定网格线的位置. 网格线不指定标记和长度,但可以给定风格.
产生 网格线,但没有 网格线:
在图形中插入对象
"重画和组合图形" 一节中讨论了如何用 GraphicsGrid 产生规则的图形阵列. 用户也可以使用 Inset 图形基元以任意方式进行图形复合和叠加.
Inset[objpos]
指定在图形中的 pos 位置插入
Inset[obj,posopossize]
按给定尺寸画出对象,使 obj 上的点 opos 在图形的点 pos 处.
Inset[obj,posopossizedirs]
指定插入单元的轴要延 dirs 方向
插入图形.
一个图形:
在参数图形内部产生一个子图:
一个三维图形:
产生一个二维图形对象,包含该三维图形大小不同的两个拷贝:
旋转和扭斜后的插入图形:
Wolfram 语言可以在 Inset 中随意画出 2D 或 3D 的图形、单元格以及文字. 通常图形对象显示区域的尺寸被设置为至少与 Inset 的一对边重合.
密度图和等高图
DensityPlot[f,{x,xmin,xmax},{y,ymin,ymax}]
画出 f 的密度图
ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}]
画出 xy 的函数 f 的等高图
密度图和等高图.
画出 的密度图. 颜色越浅,所对应的函数值越大:
选项名称
默认值
ColorFunctionAutomatic
使用什么颜色给阴影上色; Hue 使用一系列色彩
MeshNone
是否画出网格
PlotPointsAutomatic
在各个方向上初始采样点的个数
MaxRecursionAutomatic
递推分割步骤的最大次数
DensityPlot 的一些选项.
可以这样画出网格:
密度图中各个点的颜色对应着所画函数在各点的值. 按照默认值,随着函数值的增加,图形颜色由黑到白变化,中间过渡色为蓝色. 然而通常需要为点值和颜色的关系指定其他的颜色映射. 选项 ColorFunction 允许用户指定一个函数从而确定各点的函数值与颜色的对应关系. 颜色函数可能返回 Wolfram 语言的任何颜色指令, 例如 GrayLevelHue 或者 RGBColor. 一个经常使用的设置是 ColorFunction->Hue.
用不同色彩代表不用的值:
个性化颜色函数的一个重要的资源是 ColorData 函数. ColorData 提供了许多个性化的色彩集,可以直接被 ColorFunction 使用.
可以通过使用 ColorData 调用的一个颜色梯度列表:
DensityPlot 与上面的图形完全相同,但使用的颜色梯度是 "SolarColors"
画出函数的等高线图:
等高图实际上给定的是函数的地形图. 等高线将曲面上相同高度的点连接起来. 默认设置下,等高线对应着一系列间隔相等的 z 值. Wolfram 语言画出的等高图默认设置是有阴影的,z 越大颜色越浅.
选项名称
默认值
ColorFunctionAutomatic
使用什么颜色给阴影上色; Hue 使用一系列色彩
ContoursAutomatic
等高线的个数,或者是等高线的 z 值列表
PlotRange{Full,Full,Automatic}
所包括值的范围; 可以指定 {zmin,zmax} AllAutomatic, 或者一个列表 {xrange,yrange,zrange}
ContourShadingAutomatic
如何给各个区域上阴影; None 使各个区域空白,或者提供一个颜色列表
PlotPointsAutomatic
在各个方向上初始采样点的个数
MaxRecursionAutomatic
递推分割步骤的最大次数
ContourPlot 的一些选项.
一幅无阴影的图形:
画出等高层交替使用浅红和浅紫色:
DensityPlotContourPlot 使用适应性的算法,把绘图区域分成小块,以便得到更多的采样点,从而画出更平滑的函数图形. 由于采样点数总是有限的,所以有时可能造成函数特征的丢失. 在必要时可以通过增大 PlotPointsMaxRecursion 选项的值来增加采样点数.
需要注意的一点是,函数值在某一区域变化过快会可能造成Plot 生成的曲线不准确,然而函数值在某一区域变化过慢则会造成 ContourPlot 生成的等高线的形状错误. 一个快速变化的函数给定等高线的常规形式,但函数如果过于平缓则会给出不规则的等高线. 通常可以通过增大 PlotPointsMaxRecursion来解决这一问题.
三维图形基元
Wolfram 系统图形的强大功能之一是具有二维和三维的图形基元. 通过三维图形基元的结合,就可以在 Wolfram 系统中表示和生成三维图形对象.
Point[{x,y,z}]
坐标为 xyz 的点
Line[{{x1,y1,z1},{x2,y2,z2},}]
通过点 {x1,y1,z1}{x2y2z2} 的折线
Polygon[{{x1,y1,z1},{x2,y2,z2},}]
有给定顶点列表的填充的多边形
Cuboid[{xmin,ymin,zmin},{xmax,ymax,zmax}]
立方体
Arrow[{pt1,pt2}]
pt1 指向 pt2 的箭头
Text[expr,{x,y,z}]
在位置 {xyz} 处的文本 (参见 "文本中的图形基元")
三维图形元素.
每运行一次 rcoord 产生一个三维的随机坐标:
在三维空间中产生了20个随机点:
这些点的图形:
画出在三维空间中通过10个随机点的线:
如果给出的是二维图形基元列表,Wolfram 系统就依次画出各个元素,后面的元素遮蔽前面的元素. 而在三维的情况下Wolfram 系统将所给的图形元素综合在一起,将其显示为三维的图形对象,位置在前面的遮蔽位置在后面的元素.
每运行一次 rantri,就在三维空间中生成一个随机三角形:
画出一个随机三角形:
一次画出5个随机三角形. 前边的三角形遮蔽后边的三角形:
通过创建一个适当的多边形列表,可以在 Wolfram 系统中构造任何三维图形. 例如由 ParametricPlot3D 产生的所有曲面实际上就是用多边形列表来表示的.
Point[{pt1,pt2,}]
pt1pt2 等点组成的复点
Line[{line1,line2,}]
line1line2 等线组成的复线
Polygon[{poly1,poly2,}]
poly1poly2 等多面体组成的复多边形
可以同时取多个元素的基元.
与二维基元相同,一些三维图形基元可以使用多重坐标形式. 这是一种更有效的表示. 对于大量的基元,尽可能的使用多重坐标形式,既可减少生成图形的内存,也可提高画图速度.
rantricoords 仅仅定义一个随机三角形的坐标:
使用 Polygon 复合坐标系,高效地表示出大量的三角形:
Wolfram 系统允许三维的多边形有任意数目的顶点并以任何形式排放. 根据顶点位置不同,产生的多边形可能会不共面或不是突多边形. 当画这些不共面的多边形时,Wolfram 系统会在画图前把多变形分成一个个平面三角形.
不共面多变形被分成三角形. 三角形间的交线不像 Polygon 基元的外侧边线那样画出:
自相交的非突多面体的填充是根据奇偶规则,在每个交叉点交互进行填充或不填充:
Cone[{{x1,y1,z1},{x2,y2,z2}}]
底部以 {x1,y1,z1} 为圆心,半径为1,顶点在 {x2y2z2} 的圆锥体
Cone[{{x1,y1,z1},{x2,y2,z2}},r]
半径为 r 的圆锥
Cuboid[{x,y,z}]
对角坐标为 {xyz}{x+1y+1z+1} 的单元立方体
Cuboid[{xmin,ymin,zmin},{xmax,ymax,zmax}]
对角具有指定坐标的立方体 (长方体)
Cylinder[{{x1,y1,z1},{x2,y2,z2}}]
端点坐标为 {x1y1z1}{x2y2z2},半径为 1 的圆柱体
Cylinder[{{x1,y1,z1},{x2,y2,z2}},r]
半径为 r 的圆柱体
Sphere[{x,y,z}]
圆心为 {xyz} 的单位圆
Sphere[{x,y,z},r]
半径为 r 的球面
Tube[{{x1,y1,z1},{x2,y2,z2},}]
连接指定点的管
Tube[{{x1,y1,z1},{x2,y2,z2},},r]
半径为 r 的管
立方体图形元素.
画出三维空间中的一些随机单元立方体和单元球体:
尽管 ConeCylinderSphereTube 能画出高质量的图形, 其用途却是可以调整的. 一幅图像可以包含成千的基元. 在画这些图形基元时,可以通过一些特殊选项,改变默认设置下 ConeCylinderSphereTube 的点数, 从而提高画图效率. Graphics3D 中的 "ConePoints" Method 选项用于降低每个圆锥的图像质量. 相似地,圆柱体、球体和管体的图像质量也可以分别通过 "CylinderPoints""SpherePoints""TubePoints" 来调整.
由于圆柱体太小,减少绘制图形的点数基本上感觉不到有什么不同:
三维图形指令
与二维相同,可以用各种图形指令来指定在一个三维图形对象中如何绘制不同的元素.
所有二维图形指令对三维同样有效. 此外在三维中还增设了一些其他的指令.
与二维相同,可以使用 PointSizeThicknessDashing 令 Wolfram 系统去产生 Point (点)和 Line (线)元素. 要注意在三维情形下, 出现在这些指令中的长度按图形显示区域的总宽度比例来度量.
生成 20个三维的随机点:
显示这些点,每个点是一个圆,其直径为显示区域宽度的5%:
与二维情形相同,可以用 AbsolutePointSizeAbsoluteThicknessAbsoluteDashing 使长度以绝对单位表示.
产生通过10个三维随机点的线:
将线显示成虚线,其宽度相当于2个打印机的点:
在三维图形中,Point(点)和 Line(线)的色彩设置指令与二维时相同. 而对于 Polygon(多边形)来说,色彩设置指令在两种情形时有所不同.
在二维图形中,多边形总有一个由 RGBColorOpacity 等图形指令直接指定的内在色彩. 而在三维图形中,Wolfram 系统是在模拟亮度基础上更加物理化的方式来生成多边形的色彩. 多面体仍有一个由色彩指令指定的内在色彩,但绘制这些图形时所观察到的最终色彩可能会根据各多边形上光度值的不同而不同. 默认设置下,各多边形的内在色彩是白色.
Lighting->Automatic
使用系统默认光源设置和光度值
Lighting->None
不使用所有光源
Lighting->"Neutral"
仅使用白色光源
三维图形中多边形着色的一些方法.
使用默认亮度画出一个20面体,各多边形的内在色彩为白色:
使用相同亮度参数画出该20面体,但定义其内在色彩为灰色:
当使用 "Neutral" 的亮度设置时,多边形的色彩值更加明显:
使灰色仅对线生效,不受光源的影响:
与二维指令相同,可以使用一个子列表将色彩指令仅作用于线:
EdgeForm[]
多边形的边界不画线
EdgeForm[g]
使用图形指令 g 确定在多面体边界如何画线
多边形的边线指令.
在 Wolfram 系统中产生三维图形对象时,有两种类型的线. 第一种是包含在图形对象中的 Line (线)基元. 第二种是由多边形的边界产生的线.
EdgeForm 中给出一组图形指令就可以让 Wolfram 系统生成第二种线.
画出一个边缘为粗灰线的12面体:
FaceForm[gfront,gback]
对每个多边形的前面使用 gfront 图形指令, 对其后面使用 gback 图形指令
多边形前后面的生成.
三维图形中多边形一个重要的方面是有前后面之分. Wolfram 系统定义多边形后面的约定如下:从多边形的前面看时,按用户所指定的顺序,该多边形的定点逆时针方向出现.
使每个多边形的前面(外侧)透明,而后面(内侧)完全不透明:
三维图形的坐标系
Wolfram 语言画三维图形时,总要在外边加一个立方盒. 在默认设置 Boxed->True 下,Wolfram 语言会画出盒子的边缘. 但一般情况下,Wolfram 语言会自动擦去该立方盒之外的任何部分.
选项 PlotRange 指定 Wolfram 语言应该包括在盒内 坐标的范围. 与二维时相同,默认设置是 PlotRange->Automatic,令 Wolfram 语言用内部算法尽量包含图形中 令人感兴趣 的部分,而擦掉外围部分. 使用 PlotRange->All,令 Wolfram 语言包含所有部分.
调入一个包含各种多面体的程序包:
产生一个星状的20面体:
显示该星状的20面体,将其画在立方盒中:
通过设置 PlotRange,星状20面体的许多部分由于位于立方盒之外而被擦去:
与二维情况类似,可以使用 原始尺度 坐标在三维对象中确定元素的位置. 由 Scaled[{sxsysz}] 确定的尺度坐标,在每一个方向上的取值范围是从 0 到 1. 坐标系在盒子上为右手系.
{xyz}
原始坐标
Scaled[{sxsysz}]
尺度坐标,各维变化范围为 0 到 1
三维对象的坐标系.
在立方盒的一个顶点上放一个立方体:
在指出各种图形基元应放在盒子内的什么位置后,必须告诉 Wolfram 语言如何画出盒子. 第一步是确定盒子的形状. 这一步与确定二维图形的纵横比类似. 在三维情形中,可以使用 BoxRatios 指定盒子边长的比例. 对于 Graphics3D 对象,默认设置是 BoxRatios->Automatic,其使得盒子的形状根据盒子内元素的具体坐标范围来确定.
BoxRatios->{xryrzr}
指定盒子的边长比
BoxRatios->Automatic
从实际坐标范围确定边长比(Graphics3D 的默认值)
指定三维对象边界盒的形状.
在一个长盒子中显示星状20面体:
产生三维图像时,必须告诉 Wolfram 语言是从哪一个方位来观察对象,这需要可以使用 ViewPoint 选项.
"三维曲面绘图" 一节中已经给出了这个选项的常用设置. 然而通常可以让 Wolfram 语言取任意视点.
视点用 ViewPoint->{sxsysz} 指定. si 的值用一个特殊的坐标系给出,该坐标系的原点在盒子的中心 {0,0,0},而将盒子最长的一个边作为一个单位来度量,盒子的其他边长由选项 BoxRatios 的设置确定. 对一个正立方盒子而言,每个边的坐标都是从 变化. 要注意视点总在盒子之外.
用默认视点 {1.3,-2.4,2} 产生一个图形:
视点接近盒子的一个顶点时得到的图形:
当离盒子较远时,透视效果变小:
选项名称
默认值
ViewPoint{1.3,-2.4,2}
尺度坐标系中的观察点
ViewCenterAutomatic
尺度坐标系中出现在最终图形中心的点
ViewVertical{0,0,1}
尺度坐标系中出现在最终图形中的竖直方向
ViewAngleAutomatic
模拟相机用于观察图形的开放半角
ViewVectorAutomatic
模拟相机在图形常规坐标系中的位置和方向
三维对象的位置和定向设置.
建立三维图形不仅需要指定观察位置,还需要指定如何给最终图形加边框. 这用选项 ViewCenterViewVerticalViewAngle 来实现.
ViewCenter 允许用户告诉 Wolfram 语言对象的哪一点应该在最终图形的中心. 这一点由尺度坐标给出,各方向盒子的边从0到1变化. 用 ViewCenter->{1/2,1/2,1/2},盒子的中心将出现在最终图形的中心. 由于不同视点的选择,盒子不一定对称,盒子的中心不一定在最终图形的中心. 可以用 ViewCenter->Automatic 使盒子中心在最终图形区域的中心.
ViewVertical 指定对象的哪一个方位应该在最终图形中指向上方. ViewVertical 用尺度坐标指出那一个方向应该在最终图形上竖直向上. 默认设置 ViewVertical->{0,0,1},使得原始坐标的 方向在最终图形中总是竖直向上.
Wolfram 语言利用模拟相机的性能来对最终图像制造视觉影象. 对象的位置,观察的取向,以及相机的朝向由选项 ViewCenterViewVerticalViewPoint 来确定. 选项 ViewAngle 指定相机镜头的开放宽度. 选项ViewAngle 用弧度指定相机观测到的从 ViewPointViewCenter 的线的最大角度的两倍. 有效视角是 ViewAngle 值的两倍. 这表明 ViewAngle 可以有效地对图像某一部分进行放大. ViewAngle 的默认值是35°,这是人眼的通常视角.
ViewVertical 的这种设置使盒子的 轴方向在图形上竖直向上:
使用 ViewAngle 有效地对图像中心进行放大:
设置选项 ViewPointViewCenterViewVertical,也就是确定怎样观察一个物理对象. ViewPoint 确定头相对于对象的位置. ViewCenter 确定观察位置. ViewVertical 确定头向上的方式.
用坐标系的术语来说,设置 ViewPointViewCenterViewVertical 就是确定如何把盒子上的三维坐标转换为最终显示区域中图形的坐标.
ViewVector->Automatic
使用 ViewPointViewCenter 选项的值确定模拟相机的位置和朝向
ViewVector->{xyz}
对象所用相机在坐标系中的位置; 相机的朝向由 ViewCenter 选项决定
ViewVector->{{xyz}{txtytz}}
对象所用相机在坐标系中的位置及相机的焦点
选项 ViewVector 的可能值.
相机的位置和朝向可完全由选项 ViewPointViewCenter 确定,但选项 ViewVector 提供了一个有用的推广. 不是用尺度坐标给出相机的位置和朝向,ViewVector 使用与定位图形内部对象相同的坐标系对相机进行定位.
指定相机被放置在 轴的负方向,朝向图形中心:
相机位置相同但指向不同方向. 与 ViewAngle 配合使用,这里对图形某一部分进行放大:
当获得了三维对象的二维映像后,还存在如何生成图像的问题,这与二维图形中的问题相同. 例如,可以通过改变纵横比AspectRatio 来修改图形的最终形状,通过设置选项 PlotRegion 来指定图形的整个显示区域.
drag
围绕中心旋转图形
Ctrl + drag
放大或缩小图形
Shift + drag
在显示屏的平面上平移图形
与三维图形交互的鼠标操作方式.
交互性的修改图形时,Wolfram 语言对这些观察选项做出改变. 如果用户用 ViewPoint指定了相机的位置,旋转图形会使 Wolfram 语言改变选项 ViewPoint 的值. 如果相机的位置由 ViewVector 指定,旋转图形则会改变这个选项的值. 两种情况下,图形的旋转都会影响选项 ViewVertical 的值. 交互性的对图形放大和收缩则会直接影响到选项 ViewAngle. 交互性的平移图形改变的是选项 ViewCenter 的值.
改变最终图像的纵横比:
Wolfram 语言通常缩放三维对象的图形,使其在给定的显示区域中尽可能大. 尽管在大部分情况下这正是用户所需要的,但会产生一个所画出的三维对象的尺寸会随着定位不同而变化的结果. 可以通过设置选项SphericalRegion->True 来避免出现这种变化. 在这种设置下,Wolfram 语言在三维边界盒子外侧放一个球面,并调整最后的图形使得整个球面在所指定的显示区域之内. 这个球面的中心与边界盒子的中心重合,并且恰好把边界盒子放在球面内.
画出一个拉长的图形:
使用 SphericalRegion->True,调整最后的图像使得边界盒外的球面整个落在显示区域内:
通过设置 SphericalRegion->True 可以使一个对象的调整和这个对象的所有定位相一致,这对产生同一对象不同定位的动态序列是很有用的.
SphericalRegion->False
调整三维图像使其尽可能大
SphericalRegion->True
调整图像,使边界盒外面的球面能全部位于最终显示区域内
三维图像的放大倍率.
亮度和曲面特性
用默认的选项设置 Lighting->Automatic,Wolfram 语言用模拟亮度模型给三维图形的多边形着色.
Wolfram 语言允许给一个对象的亮度指定若干个分量. 其中一个是环境光线,产生对象的统一阴影. 其他分量是方向性的,在对象的不同部分产生不同的阴影. 点光源 在空间中从一点向各个方向射出模拟光线. 聚光灯 与点光源相似,但是朝一定方向发射锥形光线. 定向光 朝着给定方向发射均一的光线. Wolfram 语言将这些光源的光线加在一起决定一个多变形的亮度.
{"Ambient",color}
均一环境光线
{"Directional",color{pos1pos2}}
与从 pos1 指向 pos2 的向量平行的定向光线
{"Point",colorpos}
在位置 pos 的球形点光源
{"Spot",color{postar}α}
在位置 pos,指向目标位置 tar ,开放为半角 α 的点光源
Lighting->{light1light2}
一定数量的光线
指定光源的方法.
Wolfram 语言所使用的默认光线有三个点光源,但没有环境分量. 光源的颜色分别为红、绿、蓝,位于对象右侧 .
使用默认模拟亮度的球体:
增加环境光,并去掉所有的点光源. 注意 Lighting 选项取一列光源:
在红点处增加了一个单一点光源. 光源恰当地融合:
对象不会阻挡光源或是投下阴影,因此统一场景下的所有对象被光源均匀照亮:
增加一条从有限远处,沿 轴负方向射过来的绿色定向光 :
显示一个在图形上部的点光源,与环境光融合在一起:
Lighting 作为 Graphics3DShow 的一个选项使用时, 其控制着同一场景下所有对象的光照. Lighting 也可以用作图形指令来指定特定对象的光照. 指令Lighting 取代固有的光照设定.
指令 Lighting 取代 Lighting 后面定义的两个球体的默认设置:
这个例子使用列表使得 Lighting 指令仅作用于中间的球体:
所看到的多变形的颜色不仅取决于照射该多变形的光线,也取决于该多变形如何反光. 用图形指令 RGBColorSpecularityGlow 来指定多变形的反光或发光方式.
当不明确使用这些颜色指令时,Wolfram 语言认为所有多变形有不光滑的白色表面. 这样多变形反射所有颜色的照射光线,并且向各个方向的反射相同. 这个模型对无涂层的白纸等材料是合适的.
而使用 RGBColorSpecularityGlow 可以定义更复杂的模型. 这些指令分别指定三种光射: 漫反射镜面反射发光.
在漫反射中, 射到一个表面的光线被均匀向各个方向反射. 这类反射发生时,曲面显得有些暗淡. 漫反射服从 Lambert 光反射定律:反射光的强度是入射光强度的 倍,其 是入射光线和曲面法线的夹角. 注意当 时无反射光.
在镜面反射中,曲面像镜子一样反射光线. 此时曲面有明亮的外表. 对理想的镜面,光线的入射角和反射角相等. 然而大部分材料都有一定程度的散射,导致反射光线分布在一定范围的角度内. Wolfram 语言通过指定一个镜面反射指数给出反射光线的分布范围,该反射指数按 Phong 光学模型来确定. 镜面反射指数为 ,从反射角偏离 角度处光线的强度为 . 因此,随着 ,曲面就完全像镜子一样. 当 减少时,曲面的光泽就减小,当 时,曲面就完全变成了漫反射面. 实际材料的 的变化范围一般是从一到几百.
发光指的是从表面辐射的具有一定颜色和强度并且独立于入射光的的光线.
大部分材料的反射是漫反射和镜面反射的结合,还有一些材料不仅反射光,其自身还发光. 对于每一种光射,对象会有一种内在颜色. 对于漫反射,入射光为白光时,反射光的颜色就是材料的内在颜色. 当入射光不是白光时,反射光的颜色就是入射光线颜色和材料内在颜色的组合. 相似地,对象可以有不同于漫反射颜色的内在的镜面反射颜色,并且镜面反射光是入射光和内在镜面反射光的组合. 对于发光,发射光的颜色由内在特性决定,与入射光线无关.
在 Wolfram 语言中,可以任意组合使用漫反射、镜面反射和发光指令. 想要去除某一种反射,相应地给出内在颜色为 Black 或者 GrayLevel[0]. 对于相当白的材料,可以指定内在颜色为 GrayLevel[a],其中 a 是这个曲面的反射能力或反射率.
GrayLevel[a]
反射率为 a 的暗淡表面
RGBColor[rgb]
有内在颜色的暗淡表面
Specularity[specn]
镜面反射率为 spec、镜面反射指数为 n 的曲面; spec 为0到1之间的数或者是一个RGBColor 的定义
Glow[col]
采用发光颜色 col 的发光表面
设置发光对象的表面特性.
显示一个默认设置为暗淡白色曲面的球体,被几个彩色光源照亮:
一个漫反射能力弱但镜面反射能力强的的球体. 球体因此在靠近光源处呈镜面高亮度,而其他部分则很暗:
在设置光源和曲面颜色时,重要的一点是确认从一个多变形反射的光线总强度不超过1. 否则就会产生奇怪的效果.
三维图形的标记
Wolfram 语言提供了各种标记三维图形的选项. 其中一些选项与 "二维图形的标记" 一节中所讨论的二维图形的选项相同,另一些则不同.
Boxed->True
图形外面画一个立方盒(默认)
Axes->True
在盒子边缘画 坐标轴
Axes->{FalseFalseTrue}
仅画 坐标轴
FaceGrids->All
在盒子表面画网格线
PlotLabel->text
给图形一个总标记
标记三维图形的一些选项.
Graphics3D 的默认值是画出盒子,但没有其他标记:
设置 Axes->True 添加了 坐标轴:
给盒子的每个面加网格线:
BoxStyle->style
指定盒子的风格
AxesStyle->style
指定坐标轴的风格
AxesStyle->{xstyleystylezstyle}
对每个坐标轴分别指定风格
风格选项.
用虚线画盒子,用较粗的线画坐标轴:
通过设置选项 Axes->True,令 Wolfram 语言在三维盒子的边上画坐标轴. 而原则上每个坐标轴可以画在四条不同的边上. 选项 AxesEdge 用来指定在哪一条边上画各个坐标轴.
AxesEdge->Automatic
用内部算法定坐标轴的位置
AxesEdge->{xspecyspeczspec}
对坐标轴 分别指定位置
None
不画出这个坐标轴
Automatic
自动确定这个坐标轴的位置
{diridirj}
指出在四条可能边的哪一个上画这个坐标轴
指定三维坐标轴的位置.
坐标较大的边上画 轴,不画出 轴,自动选择何处画 轴:
轴可以画在三维盒子的四条边上. 这四条边的区别是他们分别有较大或较小的 坐标. 用 指定 轴的位置时, 的取值为 +1-1 这分别代表较大或较小的 坐标.
AxesLabel->None
无轴标记
AxesLabel->zlabel
轴加标记
AxesLabel->{xlabelylabelzlabel}
对三个轴都加标记
三维图形中的坐标轴标记.
可以用 AxesLabel 来标记盒子的边,而不必在其上画刻度:
Ticks->None
不标刻度符号
Ticks->Automatic
自动标刻度符号
Ticks->{xticksytickszticks}
对每个轴分别标刻度符号
刻度选项 Ticks 的设置.
用户可以使用与 "二维图形的标记" 一节中所描述的给二维图形标刻度符号的相同方式给三维图形标刻度符号.
FaceGrids->None
表面无网格线
FaceGrids->All
在所有表面画网格线
FaceGrids->{face1face2}
facei 表面上画网格线
FaceGrids->{{face1{xgrid1ygrid1}}}
xgridiygridi 确定在各表面画网格线的位置和方式
在三维图形中画出网格线.
Wolfram 语言允许用户在围绕三维对象的盒子表面画网格线. 设置 FaceGrids->All 时,每个面上都用灰色画出网格线. 设置 FaceGrids->{face1face2} 可令 Wolfram 语言仅在指定面画出网格线. 每个面由一个列表 指定,其中前两个 必须为 0, 而第三个值为 +1-1. 对于每个面,可用与二维图形选项GridLines 相同的指定方式明确告诉 Wolfram 语言画网格线的位置和方式.
仅在盒子的上下表面画出网格线:
多重基元的高效表示
Point[{pt1pt2}]
由点 pt1pt2 组成的复点
Line[{line1line2}]
由线 line1line2 组成的复线
Polygon[{poly1poly2}]
由多边形poly1poly2 组成的复多边形
可取多重元素的基元.
一些基元存在复元素形式,与相同情况下分立的基元相比,能被 Wolfram 语言的前端更快速地处理和绘制图形. 对于大数量的基元, 使用复元素形式还能够显著减小笔记本文件的大小. 和不使用复元素形式相比,使用复元素形式的笔记本可以达到前者尺寸的一半或更小,而其绘图速度能达到前者的十倍.
一个复点的随机分布:
GraphicsComplex[{pt1pt2}data]
复合图形,在 data 中的图形基元的整数坐标 i 被视为 pti
基元中共享坐标数据的基元.
当多个基元共享同一坐标数据时,例如在网格或图形中,使用 GraphicsComplex 可去除重复坐标数据而使效率进一步提高. Wolfram 语言的曲面和图形绘制函数通常采用这种表示形式.
共用坐标的点和线的结构:
GraphicsComplex 不仅可以提高效率,而且在与用户交互方面也很有用. 拥有共用坐标的基元,在其中一个被拖动时始终保持连在一起.
由于GraphPlot 的输出是 GraphicsComplex他 图形的任何一部分被拖动时他 图形始终保持连接 :
任何基元都可以在 GraphicsComplex 内使用,而 GraphicsComplex 可以用于 2D 或 3D 图形. 在GraphicsComplex 内,基元的坐标位置被 GraphicsComplex 中坐标数据的指标所取代.
GraphicsComplex 复合了多种形式的基元:
GraphicsComplex 在表示多边形网格时尤其有用. 使用 GraphicsComplex,能够避免出现由数值误差所造成的相邻多边形之间的间隙.
Plot3D 的输出是 GraphicsComplex:
图形中的文本格式
BaseStyle->value
图形文本风格选项
FormatType->value
图形文本格式选项
指定图形中文本的格式.
所有格式为默认设置的图形:
这是同样的图,但是使用 12 点粗体:
使用 StandardForm 而不是 TraditionalForm
告诉 Wolfram 语言对以后的图形使用何种默认文本风格:
所有文本使用 14 号 Times 字体:
"style"
当前样式表中一种命名风格
FontSize->n
用打印机点数表示的字体尺寸
FontSlant->"Italic"
用斜体
FontWeight->"Bold"
用粗体
FontFamily->"name"
指定字体族名称 (如 "Times""Courier""Helvetica"
BaseStyle 设置中的典型元素.
在标准的 Wolfram 语言笔记本前端,可以将 BaseStyle 设置成当前笔记本样式表中所定义的风格名称. 也可以用选项 FontSizeFontFamily 来明确指定文本格式. FontSize 给出的是字体的绝对尺寸, 单位为打印点,1点等于 英寸. 在改变图形的尺寸时, 如果字体尺寸是用数字表示的,那么图形中的文本不会自动改变尺寸,要得到不同大小的文本,必须给选项 FontSize 明确指定一个新值. 如果字体尺寸是以比例量度给出的,那么随着图形尺寸的改变,字体也会按比例缩放. 使用 FontSize->Scaled[s],实际字体尺寸将是图形中 s 个比例单位.
所有的文本尺寸随着图形尺寸的改变而改变:
Style[expr,"style"]
用指定的风格输出 expr
Style[exproptions]
用指定的字体和风格选项输出 expr
StandardForm[expr]
StandardForm 输出 expr
改变单个输出块的格式.
图形的标记用当前笔记本的节标题风格输出:
仍用节标题风格,但将其改为斜体:
用12号字体产生了 StandardForm 输出:
应当意识到指定 "Section" 等风格的能力与使用标准 Wolfram 语言笔记本前端有关. 即使正在使用 Wolfram 语言的文本界面,也仍可用 FontSize 等选项指定图形中的文本格式. 可以使用的所有选项集合在 "文本和字体选项" 节给出.
文本中的图形基元
Text 图形基元可以将文本插入二位或三维图形的任意位置. 在不使用 Style 明确指定字体风格时,该文本将使用图形的基础风格.
Text[expr{xy}]
中心在点 {x,y} 的文本
Text[expr{xy}{-1,0}]
左端在 {x,y} 处的文本
Text[expr{xy}{1,0}]
右端在 {x,y} 处的文本
Text[expr{xy}{0,-1}]
中心上端在 {x,y}
Text[expr{xy}{0,1}]
中心下端在 {x,y}
Text[expr{xy}{dxdy}]
文本放置在文本框内使得 {x,y} 在相对坐标 {dx,dy}
Text[expr{xy}{dxdy}{0,1}]
由下到上阅读的竖直文本
Text[expr{xy}{dxdy}{0,-1}]
由上到下阅读的文本
Text[expr{xy}{dxdy}{-1,0}]
倒置的文本
二维文本.
产生5个文本块,并且将其显示在图形中:
左端在点 {2,2} 处的竖直文本:
指定文本偏离时,所用的相对坐标在文本框内的每一个方向上的变化范围是从 . 在这个坐标系中的点 {0,0} 定义为文本的中心,所指定的偏离不一定限制在 的范围内.
在图形基元 Text 前面加 RGBColor 或其他适当的图形指令可以指定文本块的颜色.
Text[expr{xyz}]
中心在点 {x,y,z} 的文本
Text[expr{xyz}{sdxsdy}]
具有二维偏离的文本
三维文本.
在三维图形中将文本放在指定位置:
在三维图形中使用文本时,Wolfram 语言默认为文本不会被任何多边形或其他对象所遮蔽.
选项名称
默认值
BackgroundNone
背景色
BaseStyle{}
风格或字体的指定
FormatTypeStandardForm
格式类型
Text 选项.
在默认设置下,文本放在画出的任何图形之上:
一个用整个图形背景色围绕着文本的矩形:
声音的表示
"声音" 一节介绍了如何用函数和数据列表产生声音. 这里讨论的是如何在 Wolfram 系统中表示声音.
Wolfram 系统处理声音的方式与图形类似. 事实上,Wolfram 系统可以将声音和图形结合起来生成具有音轨的图片.
与图形类似,在 Wolfram 系统中声音用符号声音对象表示. 声音对象以 Sound 为头部,包含一列声音基元,依次代表着被演奏的声音.
Sound[{s1s2}]
包含一列声音基元的声音对象
声音对象的结构.
在 "声音" 一节中讨论的函数 PlayListPlay 的返回值是 Sound 对象.
Play 返回一个 Sound 对象. 在适当的计算机系统中也产生声音:

声音基元

SampledSoundList[{a1a2}r]
具有一系列振幅级,采样率为 r 的声音
SampledSoundFunction[fnr]
采样率为 r,振幅级由函数 f 作用于 n 个连续整数得到的声音
SoundNote[nt,"style"]
具有指定风格,音符为 n,持续时间为 t 的类似于音符的声音
Wolfram 系统的声音基元.
在最底层,Wolfram 系统中的所有声音是由一系列振幅样本值或 MIDI 事件确定的. 在 SampledSoundList 中,这些振幅样本是在一个列表中明确给出的. 而在 SampledSoundFunction 中,振幅样本则是在输出声音时将指定的函数作用于一列整数变量而得到的. 在这两种情况下,所得到的振幅值必须在   之间. 在 SoundNote 中,一个音符样的声音是由代表着音频、持续时间、振幅和音符风格的一系列 MIDI 事件表示的.
根据数值列表,创建 SampledSoundList,其中采样率为 8000:
根据函数创建 SampledSoundFunction,其中采样率为 8000:
创建一个 SoundNote:
ListPlay 生成基元 SampledSoundList,而 Play 生成 SampledSoundFunction 基元. 使用默认选项设置 Compiled->TruePlay 将生成包含一个 CompiledFunction 的对象 SampledSoundFunction.
一旦生成了包含各种声音基元的 Sound 对象,必须将其作为声音输出. 与图形很像,基本途径是把根据 Wolfram 系统对声音的表示,将其转换成 Wolfram 系统前端等外部程序能够处理的更低级形式.
连续播放多个基元:
播放多个重叠的基元:
Wolfram 系统使用的声音样本的低级形式是一系列表示振幅级的十六进制数字. 在 Wolfram 系统中,振幅级是由在   之间变化的近似实数表示. 在生成低级形式时,这些振幅级被 量化. 可以使用选项 SampleDepth 来指定每个样本所使用的位数,默认值是 SampleDepth->8,其产生256种不同的振幅级,这对大多数情况是够用了. 基于音符的声音的低级形式是一个 MIDI 事件的时间量化的字节流,以此指定音符对象的各种参数. 时间的量化是在回放时自动决定的.
选项 SampleDepth 可以用在函数 PlayListPlay 中. 在声音基元中,可以通过用列表 {rate,depth} 代替采样率变量的方法来指定样本深度.

导入/导出

Import["file"]
导入声音
Export["file.ext",expr]
导出声音
导入和导出函数.
可以从本地文件系统或任何可访问的远程位置中的文件中导入音频数据.
从 Wolfram 语言文档目录中导入声音:
使用 Export 把声音写入磁盘.
把导入的 Sound 写入磁盘:
导出图形和声音
Wolfram 语言允许用户从多种格式导出图形和声音. 如果使用 Wolfram 语言笔记本前端,那么用户可以使用自己的计算机系统上的标准技巧,直接把图形和声音复制和粘贴到其他的程序中.
Export["name.ext",graphics]
按从文件名得出的格式输出图形
Export["file",graphics,"format"]
按指定格式输出声音
Export["!command",graphics,"format"]
把图形输出到一个外部命令
Export["file",{g1g2}]
为动画输出一系列图形
ExportString[graphics,"format"]
产生一个所输出图形的字符串表达式
输出 Wolfram 语言图形和声音.
"EPS"
Encapsulated PostScript (.eps
"PDF"
Adobe Acrobat 袖珍文档格式 (.pdf
"SVG"
可扩展向量图形 (.svg
"PICT"
Macintosh PICT
"WMF"
Windows metafile 文件格式 (.wmf
"TIFF"
TIFF (.tif.tiff
"GIF"
GIF 及动画 GIF (.gif
"JPEG"
JPEG (.jpg.jpeg
"PNG"
PNG 格式 (.png
"BMP"
Microsoft 位图格式 (.bmp
"PCX"
PCX 格式 (.pcx
"XBM"
X window 系统位图 (.xbm
"PBM"
袖珍位图格式 (.pbm
"PPM"
袖珍像元映射格式 (.ppm
"PGM"
袖珍灰度映射格式 (.pgm
"PNM"
袖珍任意映射格式 (.pnm
"DICOM"
DICOM 医学图像格式 (.dcm.dic
"AVI"
音频视频交错格式 (.avi
Wolfram 语言支持的典型图形格式 (第一组格式与分辨率无关).
生成一个图形:
用 Encapsulated PostScript 格式导出该图形:
向 Wolfram 语言外部输出图形时,需要指定所产生图形的绝对尺寸,这可以通过对 Export 使用 ImageSize 选项来实现.
ImageSize->x 使得图形的宽度为 x 个打印点,而 ImageSize->72xi 使宽度为 xi 英寸. 默认设置产生的图宽为4英寸. ImageSize->{x,y} 调节图形尺寸使其能放在 x×y 的区域内.
ImageSizeAutomatic
用打印点度量的图形绝对尺寸
"ImageTopOrientation"Top
是否旋转图形
ImageResolutionAutomatic
用 dpi 度量的图形分辨率
Export 选项.
在 Wolfram 语言中,图形的处理不依赖于屏幕或其他输出设备的分辨率.
许多程序和设备接收 Encapsulated PostScript (EPS)等与分辨率无关的格式的图形. 但一些需要将图形在指定的分辨率内转换为光栅或二进制映射. Export 的选项 ImageResolution 可以决定使用多少 dpi 分辨率. 这个值设置得越小,图形的质量就越差,所需的内存就越小. 屏幕显示时,典型的设置是72dpi 或更大,打印时设置 300dpi 或更大.
"DXF"
AutoCAD 绘图交换格式 (.dxf
"STL"
STL 立体格式 (.stl
Wolfram 语言支持的典型三维几何数据格式.
"WAV"
Microsoft 波格式( .wav
"AU"
μ 律编码( .au
"SND"
声音文件格式( .snd
"AIFF"
AIFF 格式( .aif.aiff
Wolfram 语言支持的典型声音格式.
导入图形和声音
Wolfram 语言不仅可以导出图形和声音,还可以将它们导入. 使用 Import 可以将各种格式的图形和声音以 Wolfram 语言表达式的形式读入 Wolfram 语言.
Import["name.ext"]
从文件 name.ext 中导入图形, 格式由文件名确定
Import["file","format"]
按指定格式导入图形
ImportString["string","format"]
从字符串导入图形
导入图形和声音.
导入一个JPEG格式的图像:
显示该图像4个拷贝的阵列:
导入一个 WAV 格式的声音文件:
Import 根据读入数据的类型产生不同结构的表达式. 如果需要对返回的数据进行处理, 通常需要知道这个结构.
Graphics[primitivesopts]
与分辨率无关的图形
Image[dataopts]
依赖分辨率的位图图像
{graphics1graphics2}
动画图
Audio[data]
音频信号
Import 返回的表达式的结构.
显示前面输入的图形对象的总体结构:
提取所用的像素值阵列:
阵列的尺寸:
显示像素值的分布:
图像变换后的版本: